题目描述
用高精度计算出 S = 1!+2!+3!+⋯+n!(n≤50)。
其中“!”表示阶乘,例如:5! = 5×4×3×2×1。
输入格式
一个正整数 n。
输出格式
一个正整数 S,表示计算结果。
【数据范围】
对于100%的数据,1≤n≤50。
主要就是n一旦大了的话,就没有类型能够表示那么大的值了,这时候就需要用数组按位数表示。
主要解题思路是要明白:123*5可以表示为100*5+20*5+3*5,就是说整体乘5可以表示为每个位数乘5.
#include<iostream>
using namespace std;
int ans[105],arr[105];
int main()
{
ans[0]=arr[0]=1;
int n,i,o,p;
cin>>n;
for(i=2;i<=n;++i) {
for(o=0;o<100;++o) arr[o]*=i;
for(o=0;o<100;++o) {
if(arr[o]>=10) {
arr[o+1]+=arr[o]/10;
arr[o]%=10;
}
}
for(o=0;o<100;++o) {
ans[o]+=arr[o];
for(p=0;p<100;++p) {
if(ans[p]>=10) {
ans[p+1]+=ans[p]/10;
ans[p]%=10;
}
}
}
}
for(i=99;i>=0&&ans[i]==0;--i);
for(o=i;o>=0;--o) cout<<ans[o];
return 0;
}