[B]project Euler #20-2回目:こちらが正解

例によって、
配列で繰り上げを表現し、
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;