1173:阶乘和

邮差的信 提交于 2020-03-02 14:54:18

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;
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!