どーも、みつおです。
階乗の記号って!(ビックリマーク)なんだけど、びっくりするほど大きな数字になるかららしい。
ほんとビックリするほど大きな数字になるよね。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