どーも、みつおです。
階乗の記号って!(ビックリマーク)なんだけど、びっくりするほど大きな数字になるかららしい。
ほんとビックリするほど大きな数字になるよね。10!で3628800だもん。
問題
145は面白い数である. 1! + 4! + 5! = 1 + 24 + 120 = 145となる.
各桁の数の階乗の和が自分自身と一致するような数の和を求めよ.
注: 1! = 1 と 2! = 2 は総和に含めてはならない.
出典:Problem34
解答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
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
コメントを残す