20問目

 n! n \times (n-1) \times \dots \times 3 \times 2 \times 1 という意味である.
 100! の各桁の数字の合計を求めよ.

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