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秒で終わった。