一道网申试题,练习了一下,算法理解起来比较简单。
请使用你熟悉的编程语言(答题时请标注出是何种语言)精确的计算出10000的阶乘。
#include <iostream>
using namespace std;
int result[40000]; //根据公式n*lg((n+1)/2)开辟大约36990以上位数的空间
int main() {
int CF=0;
int j=1;
result[0]=1;
for(int i=1;i<=10000;i++){
for(int k=0;k<j;k++){
result[k]=result[k]*i+CF;
CF=result[k]/10;
result[k]=result[k]%10;
if(CF!=0&&(j-k)==1) //当内层循环即将结束,判断是否产生进位溢出,循环条件改变
j++;
}
}
while(j!=1){
j--;
cout<<result[j];
}
return 0;
}