Project Euler : Problem 20 『Factorial digit sum』

清書用紙が徐々にぐちゃぐちゃになって行きます清書用紙が徐々にぐちゃぐちゃになって行きます / masahiko
projecteuler.net


問題

 100!の各桁を全て足し合わせた値を求めよ。


階乗

 大体わかってきた。
こういう「桁全部足す(掛ける)」系の問題は値を出すしかないのだと。
なので愚直に計算します。


コード
using System;
using System.Diagnostics;
using System.Numerics;

namespace Problem20
{
    class Program
    {
        static void Main(string[] args)
        {
            Debug.WriteLine(FactorialDigitSum(100));
        }

        static BigInteger FactorialDigitSum(int n)
        {
            BigInteger bi = Factorial(n);

            return DigitSum(bi);
        }

        static BigInteger Factorial(int n)
        {
            BigInteger bi = 1;

            for (BigInteger i = 2; i <= n; i++)
            {
                bi *= i;
            }

            return bi;
        }

        static BigInteger DigitSum(BigInteger bi)
        {
            String s = bi.ToString();
            BigInteger sum = 0;

            foreach (char c in s)
            {
                sum += (c - '0');
            }

            return sum;
        }
    }
}
解答

 648


 ちなみに100!は
93326215443944152681699238856266700
49071596826438162146859296389521759
99932299156089414639761565182862536
97920827223758251185210916864000000
000000000000000000

になります。



地獄の計算魔

地獄の計算魔

おふろでレッスン 九九のひょう

おふろでレッスン 九九のひょう

インド式かんたん計算法―1冊で頭がよくなる 大人も子どもも、楽しみながら「算数脳」になる! (知的生きかた文庫)

インド式かんたん計算法―1冊で頭がよくなる 大人も子どもも、楽しみながら「算数脳」になる! (知的生きかた文庫)