トップページに戻る
次のC#のサンプルへ
前のC#のサンプルへ
Problem34 各桁の数の階乗の和が自分自身と一致する数
問題
145は面白い数である。
1! + 4! + 5! = 1 + 24 + 120 = 145となる。
各桁の数の階乗の和が自分自身と一致する数の総和を求めよ。
注: 1! = 1 と 2! = 2 は総和に含めてはならない。
ソース
using System;
class Program
{
static void Main()
{
int Answer = 0;
for (int I = 3; I <= 2540160; I++) {
string StrI = I.ToString();
int KaijyoSum = 0;
foreach (char EachChar in StrI.ToCharArray()) {
KaijyoSum += DeriveKaijyo(EachChar - '0');
if (I < KaijyoSum) break;
}
if (I == KaijyoSum) {
Console.WriteLine("{0}の各桁の数の階乗の和が、自分自身と一致", I);
Answer += I;
}
}
Console.WriteLine("答えは{0}", Answer);
}
static int DeriveKaijyo(int n)
{
int WillReturn = 1;
for (int I = 2; I <= n; I++) WillReturn *= I;
return WillReturn;
}
}
実行結果
145の各桁の数の階乗の和が、自分自身と一致
40585の各桁の数の階乗の和が、自分自身と一致
答えは40730
解説
9の階乗 = 362880
よって、
1桁の最大値 362880*1= 362880
2桁の最大値 362880*2= 725760
3桁の最大値 362880*3=1088640
4桁の最大値 362880*4=1451520
5桁の最大値 362880*5=1814400
6桁の最大値 362880*6=2177280
7桁の最大値 362880*7=2540160
8桁の最大値 362880*8=2903040
9桁の最大値 362880*9=3265920
よって、調べる数の上限を7桁の最大値である2540160としてます。
8桁は、調べても無駄であり、
7桁も2540160より大きい数は調べても無駄だからです。