【题目描述】
用高精度计算出S=1!+2!+3!+…+n!(n≤50),其中“!”表示阶乘,例如:5!=5×4×3×2×1。
输入正整数n,输出计算结果S。
【输入】
一个正整数n。
【输出】
计算结果S。
【输入样例】
5
【输出样例】
153
【源程序】
#include<iostream>
#include<cstring>
using namespace std;
int a[500],sum[500];
void mul(int x)//高精乘
{
int i;
for(i=1;i<=a[0];i++)
a[i]*=x;
for(i=1;i<=a[0];i++)
{
a[i+1]+=a[i]/10;
a[i]%=10;
}
i=a[0];
while(a[i+1]>0)
i++;
a[0]=i;
i=a[0];
while(a[i]>10)
{
a[i+1]+=a[i]/10;
a[i]%=10;
i++;
}
a[0]=i;
}
void add()//高精加
{
int i;
if(sum[0]>a[0])
sum[0]=sum[0];
else
sum[0]=a[0];
for(i=1;i<=sum[0];i++)
{
sum[i]+=a[i];
sum[i+1]+=sum[i]/10;
sum[i]%=10;
}
if(sum[sum[0]+1]>0)
sum[0]+=1;
}
int main()
{
int n;
int i;
cin>>n;
a[0]=1;a[1]=1;sum[0]=1;sum[1]=0;
for(i=1;i<=n;i++)
{
mul(i);//计算阶乘
add();//计算阶乘和
}
for(i=sum[0];i>=1;i--)
cout<<sum[i];
cout<<endl;
return 0;
}
版权声明:本文为u011815404原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。