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

Problem20 100の階乗の各桁の合計

問題

n × (n - 1) × ... × 3 × 2 × 1 を n! と表す。
100! の各桁の数字の合計を求めよ。


ソース

#include <iostream>
#include <numeric>

void main()
{
    int IntArr[9999] = {0};
    IntArr[0] = 1;

    const int UB = sizeof(IntArr)/sizeof(int)-1;
    for (int I = 1; I <= 100; I++) {
        for (int J = 0; J <= UB; J++) {
            IntArr[J] *= I;
        }
        for (int J = 0; J <= UB-1; J++) {
            if (IntArr[J] >= 10) {
                IntArr[J + 1] += IntArr[J] / 10;
                IntArr[J] %= 10;
            }
        }
    }
    std::cout << std::accumulate(IntArr,IntArr+UB+1,0) << std::endl;
}


実行結果

648


解説

intの配列で大きい桁の変数を代用してます。