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

Problem56 もっとべき乗の数字和

問題

Googol(10の100乗)は非常に大きな数である(1の後に0が100個続く)
100の100乗は想像を絶する(1の後に0が200回続く)

その大きさにも関わらず, 両者とも数字和(桁の和)は1である.

a, b < 100 について自然数 aのb乗 を考える. 数字和の最大値を答えよ.


ソース

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        int MaxSuujiWa = 0;

        for (int a = 1; a <= 99; a++) {
            int[] NumArr = new int[200];
            NumArr[0] = 1;
            for (int b = 1; b <= 99; b++) {
                for (int I = 0; I <= NumArr.GetUpperBound(0) - 1; I++) {
                    NumArr[I] *= a;
                }

                for (int I = 0; I <= NumArr.GetUpperBound(0) - 1; I++) {
                    if (NumArr[I] > 9) { //繰り上がりの処理
                        NumArr[I + 1] += NumArr[I] / 10;
                        NumArr[I] %= 10;
                    }
                }

                int wkSuujiWa = NumArr.Sum();
                if (MaxSuujiWa < wkSuujiWa) {
                    MaxSuujiWa = wkSuujiWa;

                    var sb = new System.Text.StringBuilder();
                    bool AppearNonZero = false;
                    for (int I = NumArr.GetUpperBound(0); I >= 0; I--) {
                        if (NumArr[I] != 0) AppearNonZero = true;
                        if (AppearNonZero) sb.Append(NumArr[I]);
                    }

                    Console.WriteLine("{0}の{1}乗={2}が、最大の数字和{3}。"
                        , a, b, sb.ToString(), wkSuujiWa);
                    Console.WriteLine();
                }
            }
        }
    }
}


実行結果

省略
79の99乗=73296297596894671194679467281666017876936144887237684747595248746205105
05813666466259708405967866954414849246764203301655477856666845264764404694090267
9823589082567348293472699134109889519が、最大の数字和955。

94の98乗=23255712658709810541561304330833699959871506998612464798533130670377694
99932515889659177721098679568485110772545406818828882256776491269452187407948333
9544658453938914789983271676836345351766016が、最大の数字和970。

99の95乗=38489607889348486119277958028245967896084511560873660346586279535301481
26008534258032267383768627487094610968554286692697374726725853195657679460590239
636893953692985541958490801973870359499が、最大の数字和972。


解説

Int型の配列で桁の大きな数値を管理してます。