解决思路:
当N足够大时需要用一个空间足够大的字符串来存储阶乘结果;这个字符串同时用于存储中间结果和最终结果。主要的问题是要把大数乘法拆分开一步步计算存入一个临时的字符串。
实现代码:
#include<iostream>
using namespace std;
int main(){
int n;
while(cin>>n){
string s(4096,'0');
s[0] = '1';
for(int i=2;i<=n;i++){
string an(4096,'0');
for(int j=0;j<s.size();j++){
int temp = (s[j]-'0')*i;
int k=0;
while(temp){
int a = temp%10;
temp = temp/10;
an[j+k] = an[j+k] + a;
if(an[j+k]>'9'){
an[j+k] = an[j+k]-10;
an[j+k+1]++;
}
k++;
}
}
s = an;
}
int d; //作为逆序输出的起点
for(int i=s.size()-1;i>=0;i--)
{if(s[i]!='0') {d=i;break;}}
for(int i=d;i>=0;i--)
cout<<s[i];
cout<<endl;
}
return 0;
}