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; }
今ここにプログラムを貼ってから、関数名がひどいことに気づいた。