16問目

2^{15} = 32768 であり, その各桁の数字の合計は 3+2+7+6+8 = 26.
では, 2^{1000} の各桁の数字の合計は?

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;
}