2013-04-16 43 views
1

嘿我想把我的六位数int转换成一个字符串。我目前的代码是:int到字符串,字符串索引号错误

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; 

这样你可以对它们进行比较如果没有相对昂贵的操作,先把它们变成字符串(相信我,这不是你想为欧拉问题做的事)。

你甚至可以优化循环,因为你知道所有的候选人编号或者是五六位:

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

民将是5位数字,因为100 * 100 == 10000的第一次迭代是存储如长度为5的字符串由于阵列索引值0的串只能被索引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

snum的长度应该在第一次和第二次分配前检查....... – vikky