1173:阶乘和
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 6010 通过数: 3049
【题目描述】
用高精度计算出S=1!+2!+3!+…+n!(n≤50),其中“!”表示阶乘,例如:5!=5×4×3×2×1。
输入正整数n,输出计算结果S。
【输入】
一个正整数n。
【输出】
计算结果S。
【输入样例】
5
【输出样例】
153
思路: 分2个函数来操作,阶乘处理 和加的处理 组合 完成
#include<cstdio>
#include<iostream>
using namespace std;
int len=1,t[10001],ans[10001],anslen,n;
void jiecheng(int s)
{
for(int i=1;i<=len;i++)
t[i]*=s;
int i=1;
while(t[i]>9||i<len)
{
t[i+1]+=t[i]/10;
t[i]%=10;
i++;
}
len=i;
}
void jia()
{
for(int i=1;i<=len;i++)
{
ans[i]+=t[i];
if(ans[i]>9)
{
ans[i+1]+=ans[i]/10;
ans[i]%=10;
anslen=max(anslen,i+1);
}
anslen=max(anslen,i);
}
}
int main(){
cin>>n;
t[len]=1;
for(int i=1;i<=n;i++)
jiecheng(i),jia();
for(int i=anslen;i>=1;i--)
printf("%d",ans[i]);
return 0;
}
来源:CSDN
作者:zqhf123
链接:https://blog.csdn.net/zqhf123/article/details/104608524