Project Euler 56

Googol (10^100)は非常に大きな数である: 1の後に0が100個続く. 100^100は想像を絶する. 1の後に0が200回続く. その大きさにも関わらず, 両者とも桁の和は1である.

a, b < 100について自然数a^bを考える. 桁の和の最大を答えよ.

C/C++

#pragma comment(lib,"mpir.lib")
#include <mpir.h>
#include <iostream>
using namespace std;

// m^nの各桁の合計を返す
int sumDigits(int m, int n){
	char c[1000];
	mpz_t a;
	string str;

	for(int i=0 ; i<1000 ; i++){
		c[i]=48;
	}
	mpz_init_set_ui(a,1);

	mpz_ui_pow_ui(a,m,n);
	mpz_get_str(c,10,a);
	str = c;

	int sum=0;
	for(int k=0 ; k<1000; k++){
		if(c[k]!=0){
			sum += c[k]-48;
		}
	}
	return sum;
}

int main(){
	int ans=0, tmp;

	for(int i=0 ; i<100 ; i++){
		//cout << "i -> " << i << ", ans -> " << ans << endl;
		for(int j=0 ; j<100 ; j++){
			tmp = sumDigits(i,j);
			if(ans<tmp) ans = tmp;
		}
	}
	cout << ans << endl;
}

今ここにプログラムを貼ってから、関数名がひどいことに気づいた。