2013-06-11 45 views
1

我一直在这个问题上停留了相当一段时间,它似乎工作正常,当我在控制台输入输入,但是当提交我的解决方案总是失败测试#3(你看不到什么输入或输出是)。问题在这里Timus。这是问题:愚蠢的平方根难题

问题很简单,作者懒得为它写一个声明!

输入

输入流包含一组整数艾(0≤艾≤1018)的。数字由任意数量的空格和换行符分隔。输入流的大小不超过256 KB。

输出

对于每个编号艾从最后一个,直到你应该输出的平方根的第一个。每个平方根应该在一个单独的行中打印,小数点后至少有四位数字。

输入:

1427 0 

    876652098643267843 

5276538 

输出:

2297.0716 

936297014.1164 

0.0000 

37.7757 

这是我的代码:

using System; 
using System.Collections.Generic; 
using System.IO; 

namespace ReverseRoot 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     List<ulong> longs = new List<ulong>(); 

     string current = ""; 
     bool inNumber = false; 

     string input = Console.In.ReadToEnd(); 
     for (int i = 0; i < input.Length; ++i) 
     { 
      char c = input[i]; 
      if (inNumber && !char.IsDigit(c)) 
      { 
       longs.Add(ulong.Parse(current)); 
       inNumber = false; 
       current = ""; 
      } 
      if (char.IsDigit(c)) 
      { 
       inNumber = true; 
       current += c; 
      } 
     } 

     longs.Reverse(0, longs.Count); 

     foreach (ulong n in longs) 
     { 
      double p = (Math.Truncate(Math.Sqrt(n) * 10000.0))/10000.0; 
      Console.WriteLine("{0:F4}", p); 
     } 
     Console.ReadLine(); 
    } 
} 
} 

我还尝试四舍五入到由于四个小数位措辞的问题是不完全清楚:

 foreach (ulong n in longs) 
     { 
      Console.WriteLine("{0:F4}", Math.Sqrt(n)); 
     } 

我已经通过值在控制台的范围内试图数字,不知道它可能是什么。

+0

您应简要描述你的代码是试图解决,使人们的问题不需要访问该网站以了解您的问题。简单输入和预期输出的例子也有帮助。 – hatchet

+1

我认为你的代码在最后一个长整型值之后没有空格或换行符时失败。你的代码不会解析最后一个值,因为你的逻辑需要'!char.IsDigit(c)'来触发获取值。 – hatchet

+0

好抓斧头,这是真的! –

回答

8

这给该网站上的多数民众赞成输出......(你截一个没有,所以需要四舍五入)

private static void Main(string[] args) 
{    
    Console.In.ReadToEnd().Split(new[] { ' ', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries) 
     .Select(ulong.Parse) 
     .Reverse() 
     .Select(n => Math.Sqrt(n).ToString("F4")) 
     .ToList() 
     .ForEach(Console.WriteLine); 
} 
+0

+1这个优雅的Linq解决方案! – darkey

+1

可以做到这一点linq声明;) –

+1

我现在已经完成 –