トップページに戻る    次のC#のサンプルへ    前のC#のサンプルへ

Cマガ電脳クラブ(第083回) 3数で大町どうさま

問題

0から9までの数字がすべてひとつずつ含まれている10桁の数を、大町数という(ただし0は左端にこない)。
ある連続した3数(n, n+1, n+2)を掛け合わせたら、大町数になったという。
そのような3数をすべて見つけてほしい。もちろん、負の数は考えない。


ソース

using System;

class Program
{
    static void Main()
    {
        for (long n = 0; true; n++) {
            long ProdVal = n * (n + 1) * (n + 2);
            if (ProdVal > 9876543210) break;

            //大町数は9の倍数
            if (ProdVal % 9 > 0) continue;

            if (IsOomatiSuu(ProdVal))
                Console.WriteLine("{0}*{1}*{2} = {3}", n, n + 1, n + 2, ProdVal);
        }
    }

    //大町数かを判定
    static bool IsOomatiSuu(long pTargetNum)
    {
        if (pTargetNum < 1234567890) return false;
        if (pTargetNum > 9876543210) return false;

        bool[] IsAppearedArr = new bool[10];

        long CopiedVal = pTargetNum;
        do {
            long ModVal = CopiedVal % 10;

            //同じ数字を2個以上含んだらNG
            if (IsAppearedArr[ModVal]) return false;
            IsAppearedArr[ModVal] = true;
        } while ((CopiedVal /= 10) > 0);
        return true;
    }
}


実行結果

1267*1268*1269 = 2038719564
1332*1333*1334 = 2368591704


解説

ナイーブに実装してます。