题目描述
【题目描述】
用高精度计算出S=1!+2!+3!+…+n!(n≤50),其中“!”表示阶乘,例如:5!=5×4×3×2×1。
输入正整数n,输出计算结果S。
【输入】
一个正整数n。
【输出】
计算结果S
样例
【输入样例】
5
【输出样例】
153
这道题就需要在主函数里面加一个for循环了,其实跟大整数乘法有些相似,详情请见
https://www.acwing.com/solution/content/78980/
C++ 代码
#include<iostream>
using namespace std;
const int N=1005;
int a[N];
int b[N];
int len=1;
void fac(int n)
{
for(int i=1;i<=len;i++)
a[i]*=n;
int i=1;
while(a[i]>9||i<len)
{
a[i+1]+=a[i]/10;
a[i]%=10;
i++;
}
len=i;
}
void print()
{
int i;
for (i = N - 1; i >= 1; i--)
if (b[i] != 0)
break;
for (; i >= 1; i--)
cout << b[i];
}
void add()
{
for(int i=1;i<=len;i++)
{
b[i]+=a[i];
if(b[i]>9)
{
b[i+1]+=b[i]/10;
b[i]%=10;
}
}
}
int main()
{
int n;
cin>>n;
a[len]=1;
for(int i=1;i<=n;i++)
{
fac(i);
add();
}
print();
}