Project Euler 20

n × (n - 1) × ... × 3 × 2 × 1 を n! と表す。
100! の各桁の数字の合計を求めよ。

Mathematica

Total[IntegerDigits[100!]]

IntegerDigitsは、例えば 346 という数字をいれると、{3, 4, 6} というリストにして返してくれる関数です。
ここに限らず、IntegerDigitsはProject Eulerではとても使います。

C/C++

#pragma comment(lib,"mpir.lib")
#include <iostream>
#include <string>
#include <mpir.h>
#include <cstdio>
#include <cstdlib>

using namespace std;

int main(){

	mpz_t a, k, tmp;

	//a=1;
	//k=0;
	//tmp=0;
	mpz_init_set_ui(a, 1);
	mpz_init_set_ui(k, 0);
	mpz_init_set_ui(tmp, 0);

	for(int i=1 ; i<100 ; i++){
		//a*=i;
		mpz_mul_ui(a, a, i);
	}

	while(mpz_cmp_si(a,0)!=0){
		// tmp = a%10;
		mpz_mod_ui(tmp, a, 10);
		// k += tmp;
		mpz_add(k, k, tmp);
		// a = a/10;
		mpz_div_ui(a, a, 10);
	}

	// cout << k << endl;
	mpz_out_str(stdout,10, k);
}

Project Euler 16を参考にしたら20秒で終わった。