0

6 桁の 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 から始まる場合、6 桁目は [5] ではなく、[4] は 5 桁目を返すため、ここで途方に暮れています。

4

3 に答える 3

1
100 * 100 = 10000
            01234 <- array indexes.

には5桁しかありません10000。上記を参照してください。インデックスの範囲は 0 から 4 までであるため、インデックス 5 を抽出しようとすると大変なことになります。

最初の数字と最後の数字が等しいかどうかを確認したい場合、最初の数字は単純なループで取得でき、最後の数字はモジュロ演算子で見つけることができます。

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

そうすれば、最初にそれらを文字列に変換するという比較的コストのかかる操作を行わなくても、それらを比較できます (信頼してください。これは、オイラーの問題でやりたいことではありません)。

すべての候補番号が 5 桁または 6 桁であることがわかっているため、そのループを最適化することもできます。

int firstDigit;
if (num < 100000) firstDigit = num /  10000;
else              firstDigit = num / 100000;
int lastDigit = num % 10;
于 2013-04-16T04:13:58.537 に答える
0

長さ 5 の文字列として格納される 100*100 == 10000 であるため、最初の反復では Num は 5 桁になります。

[5] は、長さ 6 の文字列を想定するため、範囲外になります。

于 2013-04-16T04:15:21.310 に答える
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;
        }
    }
于 2013-04-16T04:19:56.633 に答える