2013-04-16 3 views
1

안녕하세요 저는 6 자릿수 int를 문자열로 변환하려고합니다. 현재 코드는 다음과 같습니다.int to string, string 인덱스 번호 오류

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Euler_4 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string snum; 
      int num; 
      string final = "nul"; 
      char first; 
      char second; 
      for (int i = 100, h = 100; i < 999; i++, h++) 
      { 
       num = i * h; 
       snum = num.ToString(); 
       first = snum[0]; 
       second = snum.ToCharArray()[5]; //Line of interest 
       if (first == second) 
       { 
        final = snum; 
       } 
      } 
      Console.WriteLine(final); 
      Console.ReadLine(); 

     } 
    } 
} 

문제는 인덱스를 실행하려고하면 범위를 벗어나는 예외를 계속 반환한다는 것입니다. 0에서 시작하면 여섯 번째 숫자는 [5]가 아니며 [4]는 다섯 번째 숫자를 반환하므로 여기서 손실이 발생합니다.

+0

ToCharArray는 필요하지 않습니다. 'string'의 인덱서가 이미 작업을 수행합니다. –

+0

'ToString()'을 사용하지 않는 이유는 무엇입니까? –

답변

1
100 * 100 = 10000 
     <- array indexes. 

10000다섯 자리, 위 참조있다. 인덱스 범위는 0에서 4까지이며 인덱스 5를 추출하면 슬픔이 생길 것입니다.

당신은 평등에 대한 첫 번째와 마지막 숫자를 확인하려면

는 첫 번째는 간단한 루프를 얻을 수 있으며, 마지막은 나머지 연산자로 볼 수 있습니다 :

int firstDigit = num; 
while (firstDigit/10 > 0) firstDigit /= 10; 
int lastDigit = num % 10; 

당신이 그들을 비교할 수 있습니다 그 방법 상대적으로 비용이 많이 들지 않는 문자열을 먼저 문자열로 변환하지 않아도됩니다. (나를 믿으십시오. 여러분이 오일러 문제에 대해하고 싶은 것이 아닙니다.)

모든 후보 번호 중 5 여섯 자리입니다 알고 있기 때문에 당신은 심지어 루프를 최적화 할 수 있습니다

int firstDigit; 
if (num < 100000) firstDigit = num/10000; 
else    firstDigit = num/100000; 
int lastDigit = num % 10; 
0

민은 저장되어있는 100 * 100 == 10000 이후 처음 반복에 대한 5 개 자리가됩니다 배열은 0 귀하의 문자열 만 인덱싱 할 수 있습니다 색인 때문에 길이 5의 문자열로 0-4

[5] 그 길이의 문자열을 가정 것이기 때문에 범위를 벗어 될 것이다 6

0

시도
for (int i = 100, h = 100; i < 999; i++, h++) 
    { 
     num = i * h; 
     snum = num.ToString(); 
     first = snum.ToCharArray()[0]; 
     second = snum.ToCharArray()[4]; 
     if (snum.ToCharArray().Length > 5) 
     { 
      second = snum.ToCharArray()[5]; //Line of interest 
     } 
     if (first == second) 
     { 
      final = snum; 
     } 
    } 
+0

첫 번째와 두 번째에 할당하기 전에 스탄 길이를 확인해야합니다 ....... – vikky