16問目
であり, その各桁の数字の合計は .
http://projecteuler.net/index.php?section=problems&id=16
では, の各桁の数字の合計は?
エグい, エグすぎる!! またしても, C の苦手な ULLONG_MAX を越えた数の操作ですか!? しかも, 今回はどう考えても数学を使った回避策は無さそうだし…….
しょうがないので, ライブラリを使って楽をしました. 今回は勉強も兼ねて, pari/gp という数学用の計算ツールの API を使ってみました. ドキュメントが読みづらく, なかなか苦労しましたが.
#include <pari/pari.h> #include <stdlib.h> int main() { GEN result; char *resultString; char digit; int i; int sum; pari_init(1000000, 0); result = gpowgs(gen_2, 1000); #if DEBUG output(result); #endif resultString = GENtostr(result); for (i = 0, sum = 0; (digit = resultString[i]) != '\0'; i++) { sum += digit - '0'; } fprintf(stdout, "Solution: %d.\n", sum); free(resultString); return EXIT_SUCCESS; }