X

C#でプロジェクトオイラーを解く(問題20「各位の数字の和 2」)

どーも、みつおです。

プロジェクトオイラーってたまに、巨大すぎる数値を計算させるときあるよね。

BigIntegerの使い方は、「[C#]桁数が非常に大きい数値の計算 – BigIntegerを利用したInt64を超える数値の計算」を参考にすればいいよ。

問題

n × (n – 1) × … × 3 × 2 × 1 を n! と表す.

例えば, 10! = 10 × 9 × … × 3 × 2 × 1 = 3628800 となる.
この数の各桁の合計は 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27 である.

では, 100! の各位の数字の和を求めよ.

注: Problem 16 も各位の数字の和に関する問題です。解いていない方は解いてみてください。

出典:Problem20

解答

using System;
using System.Numerics;

namespace Problem20
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Solve());
            Console.ReadLine();
        }

        private static int Solve()
        {
            int ret = 0;
            
            //100!を求める
            BigInteger num = 1;
            for (int i = 2; i <= 100; i++) num *= i;
            
            //各桁を足し合わせる
            while (num > 0)
            {
                ret += (int)(num % 10);
                num /= 10;
            }

            return ret;
        }
    }
}

 

出力

648

みつお: