链接:https://ac.nowcoder.com/acm/contest/1069/C
来源:牛客网
题目描述
用高精度计算出S=1!+2!+3!+…+n!(n ≤ 50)其中“!”表示阶乘,例如:5!=5*4*3*2*1。
输入描述:
输入正整数N
输出描述:
输出计算结果S
示例1
输入
3
输出
9
#include<iostream>
#include<cstring>
using namespace std;
const int M = 10005;
int main()
{
int n;
cin >> n;
int arr[M]={0},brr[M]={0};
int s=1,s2=1;
memset(arr,0,sizeof(arr)) ;
memset(brr,0,sizeof(brr)) ;
arr[0]=1;
for(int i=1;i<=n;i++) {
//阶乘
for(int j=0;j<s;j++) {
arr[j]*=i;
}
for(int j=0;j<s;j++) {
if(arr[j]>=10) {
arr[j+1]+=arr[j]/10;
arr[j]%=10;
}
}
while(arr[s]) { //处理最后一个数
arr[s+1]+=arr[s]/10;
arr[s]%=10;
s++;
}
//相加
s2=s;
for(int j=0;j<s;j++) {
brr[j]+=arr[j];
if(brr[j]>=10) {
brr[j+1]+=brr[j]/10;
brr[j]%=10;
}
}
while(brr[s2] ) {
brr[s2+1] +=brr[s2]/10;
brr[s2]%=10;
s2++;
}
}
for(int i=s2+1;i>=0;i--) {
if(brr[i]!=0) {
for(int j=i;j>=0;j--)
cout <<brr[j] ;
cout <<endl;
break;
}
}
return 0;
}