トップページに戻る
次の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型の配列で桁の大きな数値を管理してます。