Project Euler 34

145は面白い数である. 1! + 4! + 5! = 1 + 24 + 120 = 145となる.
各桁の数の階乗の和が自分自身と一致するような数の総和を求めよ.
注: 1! = 1 と 2! = 2 は総和に含めてはならない.

Mathematica

ans = 0;
For[i = 3, i < 100000, i++
  If[i == Total[IntegerDigits[i]!],
   ans += i,
   {}
   ]
 ]
ans

これはMathematicaが卑怯といわざるを得ません。他の言語ならもっとめんどくさいはず。
配列に対して階乗「!」を適用できるのが強力です。

C/C++

#include <iostream>
using namespace std;

// nの階乗を返す
int factorial(int n){
	if(n==0 || n==1) return 1;

	int k=1;
	for(int i=2 ; i<=n ; i++){
		k*=i;
	}
	return k;
}

int main(){
	int total=0;

	for( int i=3 ; i<100000 ; i++){
		int num = i;
		int dig;
		int sumdig = 0;

		while(num!=0){
			dig = num%10;
			sumdig += factorial(dig);
			num /= 10;
		}

		if(i==sumdig){
			total += i;
			cout << i << endl;
		}
	}

	cout << endl << total << endl;

	int end;
	cin >> end;
	return 0;
}

「これでいいのか・・・?」ってすごく不安だった。答え少なすぎです