2013-06-11 2 views
1

콘솔에 입력을 입력 할 때 꽤 오랜 시간 동안이 문제에 봉착했습니다. 그러나 제출할 때 내 솔루션은 항상 테스트 # 3에 실패합니다. 입력 또는 출력). 문제는 여기 Timus입니다. 문제는 다음과 같습니다.바보 스퀘어 루트 퍼즐

문제는 너무 쉽습니다. 작성자가 그 문구를 작성하는 게으름이었습니다!

입력

입력 스트림은 정수 번호 (AI ≤ 1,018 0 ≤ AI)의 세트를 포함한다. 숫자는 공백과 줄 바꿈으로 구분됩니다. 입력 스트림의 크기는 256KB를 초과하지 않습니다.

당신은 출력의 제곱근을해야 첫 번째까지 마지막에서 각 번호 아이의 출력

. 각 제곱근은 소수점 이하 4 자리 이상의 별도 행에 인쇄해야합니다.

입력 :

1427 0 

    876652098643267843 

5276538 

출력 : 나는 또한 이후 네 소수점 이하 자릿수로 반올림 시도했습니다

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(); 
    } 
} 
} 

: 이것은 내 코드입니다

2297.0716 

936297014.1164 

0.0000 

37.7757 

문제의 문구는 다음과 같습니다.

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

콘솔의 값 범위를 통해 숫자를 시도했지만 그 이유는 확실하지 않습니다. 이 사이트에서 출력 먹으 렴을 제공

+0

당신은 간단하게 코드가 너무 사람이 해결하려고하는 문제를 설명한다 귀하의 질문을 이해하기 위해 해당 사이트를 방문 할 필요가 없습니다. 간단한 입력과 예상되는 출력의 예도 도움이 될 것입니다. – hatchet

+1

마지막 긴 값 뒤에 공백이나 줄 바꿈이 없을 때 코드가 실패한 것 같습니다. 당신의 논리는'! char.IsDigit (c)'가 값을 얻는 것을 요구하기 때문에 코드는 마지막 값을 구문 분석하지 않습니다. – hatchet

+0

좋은 catch 도끼, 그건 사실이야! –

답변

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

나는 지금했다 –