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

Problem63 べき乗の桁の個数

問題

5桁の数 16807 = 7の5乗は、自然数を5乗した数である.
同様に9桁の数 134217728 = 8の9乗も自然数を9乗した数である.

自然数をn乗して得られるn桁の正整数は何個あるか?


ソース

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var AnswerSet = new HashSet<string>();

        for (int n = 1; n <= 9; n++) {
            int[] ValArr = new int[30];
            ValArr[0] = 1;

            for (int a = 1; a < int.MaxValue; a++) {
                for (int I = 0; I <= ValArr.GetUpperBound(0) - 1; I++) {
                    ValArr[I] *= n;
                }

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

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

                if (sb.Length == a) {
                    Console.WriteLine("{0}の{1}乗={2}が{1}桁の数", n, a, sb.ToString(), a);
                    AnswerSet.Add(sb.ToString());
                }
                else break;
            }
        }
        Console.WriteLine("自然数をn乗して得られるn桁の正整数は{0}個", AnswerSet.Count);
    }
}


実行結果

省略
8の8乗=16777216が8桁の数
8の9乗=134217728が9桁の数
8の10乗=1073741824が10桁の数
9の1乗=9が1桁の数
9の2乗=81が2桁の数
9の3乗=729が3桁の数
9の4乗=6561が4桁の数
9の5乗=59049が5桁の数
9の6乗=531441が6桁の数
9の7乗=4782969が7桁の数
9の8乗=43046721が8桁の数
9の9乗=387420489が9桁の数
9の10乗=3486784401が10桁の数
9の11乗=31381059609が11桁の数
9の12乗=282429536481が12桁の数
9の13乗=2541865828329が13桁の数
9の14乗=22876792454961が14桁の数
9の15乗=205891132094649が15桁の数
9の16乗=1853020188851841が16桁の数
9の17乗=16677181699666569が17桁の数
9の18乗=150094635296999121が18桁の数
9の19乗=1350851717672992089が19桁の数
9の20乗=12157665459056928801が20桁の数
9の21乗=109418989131512359209が21桁の数
自然数をn乗して得られるn桁の正整数は49個


解説

10以上の桁だと、下記のように
桁の最大値よりも増分が大きいので9以下の自然数のみでべき乗値をチェックしてます。

10の1乗=  10  (1桁の数の最大値は  9)
10の2乗= 100  (2桁の数の最大値は 99)
10の3乗=1000  (3桁の数の最大値は999)

また、桁数ごとの最小値は、
下記のように10倍ずつ増えていくので、9以下の自然数でn桁の最小値以下だったら、
もう追いつけないので、Break文を記述してます。

1桁の最小値は0
2桁の最小値は10
3桁の最小値は100
4桁の最小値は1000