题目描述
用高精度计算出 S = 1! + 2! + 3! +… + n!(n<=50)。
其中“!”表示阶乘,例如:5! = 5 *4 * 3 * 2 * 1.
输入格式
一个正整数 n。
输出格式
一个正整数 S,表示计算结果。
输入输出样例
输入
3
输出
9
说明/提示
【数据范围】
对于100% 的数据,1<=n<=50。
解析:
高精度阶乘问题,用数组来存储数值。
代码:
#include<bits/stdc++.h>
using namespace std;
int n;
int a[121];//存阶乘结果
int b[121];//存求和结果
//求阶乘
void cheng(int* a,int x){
int jw=0;//进位
for(int i=1;i<=120;i++){
a[i]=a[i]*x+jw;
jw=a[i]/10;
a[i]%=10;
}
}
//求和
void add(int* b,int* a){
int jw=0;//进位
for(int i=1;i<=120;i++){
b[i]+=(a[i]+jw);
jw=b[i]/10;
b[i]%=10;
}
}
int main()
{
cin>>n;
a[1]=1;//初始值为1
b[1]=0;
for(int i=1;i<=n;i++){//由小到大求阶乘
cheng(a,i);//阶乘结果保存在a[]中
add(b,a);//求和结果保存在b[]中
}
int flag=0;
for(int i=120;i>=1;i--){
if(b[i]!=0)//由第一个非零数值开始输出
flag=1;
if(flag==1)
cout<<b[i];
}
return 0;
}