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

Problem16 2の1000乗の各数字の合計

問題

2の15乗=32768であり、これの各数字の合計は 3+2+7+6+8=26となる。
同様にして、2の1000乗の各数字の合計を求めよ。


ソース

#include <iostream>

void main()
{
    //const int Jyousuu = 15;
    const int Jyousuu = 1000;

    int wkArr[1000+1] ={0};
    const int UB = sizeof(wkArr)/sizeof(int)-1;

    wkArr[1] = 2;
    for (int I = 1; I <= Jyousuu - 1; I++) {
        for (int J = 1; J <= UB; J++) {
            wkArr[J] *= 2;
        }
        for (int J = 1; J <= UB; J++) {
            if (wkArr[J] >= 10) {
                wkArr[J + 1] += wkArr[J] / 10;
                wkArr[J] %= 10;
            }
        }
    }

    int SumVal = 0;
    for(int I=1;I<= UB; I++) {
        SumVal+= wkArr[I];
    }
    std::cout << SumVal << std::endl;
}


実行結果

1366


解説

繰り上がり値を順番に求めていってます。

2の1000乗 < 10の1000乗
であり、log10(10の1000乗) = 1000
よって、1000桁まであれば十分と判断し、
int wkArr[1000+1];
という配列の長さを決めてます。