Project Euler 30

驚くべきことに, 各桁を4乗した和が元の数と一致する数は3つしかない.

1634 = 1^4 + 6^4 + 3^4 + 4^4
8208 = 8^4 + 2^4 + 0^4 + 8^4
9474 = 9^4 + 4^4 + 7^4 + 4^4
ただし, 1=1^4は含まないものとする. この数たちの和は 1634 + 8208 + 9474 = 19316 である.

各桁を5乗した和が元の数と一致するような数の総和を求めよ.

Mathematica

A = {};
For[i = 1, i < 10000000, i++
  If[i == Total[IntegerDigits[i]^5],
   A = Append[A, i],
   {}]
 ]
A
Total[A]

どこまでいけばなくなるのかわからなかったので、1000万まで無理やり検証してます。
やはりIntegerDigits便利。(過去記事参照)

C/C++

#include <iostream>
#include <cmath>
using namespace std;

int main(){
	int n, sum, p, ans=0;

	for(int i=2 ; i<1000000 ; i++){
		n = i;
		sum = 0;

		while(n!=0){
			p = n%10;
			n /= 10;
			sum += (int)pow((double)p, 5);
		}		
		if(sum == i) ans += i;
	}

	cout << ans << endl;

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

変数の命名の仕方がへったくそだなぁ、と反省する。