配列で繰り上げを表現し、
intの最大値以上を計算する。
前回は、1桁の繰り上げだったが、
今回は100を掛けることもあるので、
繰り上げをwhileとした。
もうそろそろ、繰り上げを考慮した関数でも自作しておこうかな
/*----------------------------------------------------->
project Euler
Problem 20
n × (n - 1) × ... × 3 × 2 × 1 を n! と表す。
100! の各桁の数字の合計を求めよ。
------------------------------------------------------->*/
#include<iostream>
#include<cmath>
using namespace std;
#define NUM 100
#define LENGTH_ARRAY 256
int main(){
int factorial[ LENGTH_ARRAY ]= {0};
int sum = 0 ;
factorial[ 0 ] = 1;
for( int i = NUM ; i > 1 ; i-- ){
for( int j = 0 ; j < LENGTH_ARRAY ; j++ ) factorial[ j ] *= i ;
if( factorial[ LENGTH_ARRAY - 1 ] > 9){
cout <<"\nオーバーフローしました";
return 0;
}
for( int j = 0 ; j < LENGTH_ARRAY - 1 ; j++ ){
while( factorial[ j ] > 9 ){
factorial[ j + 1 ] += (int)floor(double(factorial[ j ] / 10)) ;
factorial[ j ] = factorial[ j ] % 10;
}//do
}//next j
}//next i
for( int j = 0 ; j < LENGTH_ARRAY ; j++ ) sum += factorial[ j ];
cout << "\nAnswer is " << sum;
getchar();
return 0;