20問目
は という意味である.
http://projecteuler.net/index.php?section=problems&id=20
の各桁の数字の合計を求めよ.
えぇ, またですか, そうですか. そんなに C をいじめたいですか??
「助けて〜, pari えも〜ん. Project Euler がイジめるよ〜. 」と再び pari/gp に泣き付いて解決しました.
#include <stdio.h> #include <stdlib.h> #include <pari/pari.h> #define PARI_INIT_SIZE 1000000 int main(int argc, char **argv) { GEN result; char *resultString; char digit; int i; int sum; int n; if (argc < 1 + 1) { fprintf(stderr, "Error: too few arguments.\n"); return EXIT_FAILURE; } n = atoi(argv[1]); pari_init(PARI_INIT_SIZE, 0); result = gen_1; for (i = 1; i <= n; i++) { result = muliu(result, i); } 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; }
ただし, コンパイルするときに pari ライブラリだけじゃなく, gmp ライブラリも使う必要がありました.
$ gcc Problem020.c -o Problem020 -lpari -lgmp