どーも、みつおです。
階乗の記号って!(ビックリマーク)なんだけど、びっくりするほど大きな数字になるかららしい。
ほんとビックリするほど大きな数字になるよね。10!で3628800だもん。
問題
145は面白い数である. 1! + 4! + 5! = 1 + 24 + 120 = 145となる.
各桁の数の階乗の和が自分自身と一致するような数の和を求めよ.
注: 1! = 1 と 2! = 2 は総和に含めてはならない.
出典:Problem34
解答
using System;
namespace Problem34
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Solve());
Console.ReadLine();
}
private static long Solve()
{
long ret = 0;
//各桁の数の階乗の和の最大値 = 2177280 = 9! * 7
for (int i = 3; i <= 2540160; i++)
{
//各桁の数の階乗の和が自分自身と一致するか判定
if (i == SumFact(i)) ret += i;
}
return ret;
}
static long SumFact(int i)
{
long ret = 0;
int n = i;
//全ての桁についてループ
while (n > 0)
{
//階乗を足しこむ
ret += Factorial(n % 10);
n /= 10;
}
return ret;
}
static long Factorial(int n)
{
if (n == 0)
return 1L;
return n * Factorial(n - 1);
}
}
}
出力
40730