题目描述 :用高精度计算: S=1!+2!+3!+4!+5!+6!+。。。+n!(n<=50)
!表示结成 n!=n*(n-1)*(n-2)*...*1
输入格式: 一个正整数n。
输出格式:一个正整数S表示计算结果
样例: 输入3,输出9
题目分析 :因为n<=50所以想要AC必须要用高精度,同时用封装更方便!!
#include<bits/stdc++.h>
using namespace std;
int n,s[1000],k[1000];
int la=1,lb=1;
void cheng(int r) {
int x=0;
for(int i=1; i<=la; i++) {
k[i]=k[i]*r+x;
x=k[i]/10;
k[i]%=10;
}
while(x) {
k[++la]=x%10;
x=x/10;
}
}
void jia() {
int x=0,z=max(la,lb);
for(int i=1; i<=z; i++) {
s[i]=s[i]+k[i]+x;
x=s[i]/10;
s[i]%=10;
}
lb=z;
while(x) {
s[++lb]=x%10;
x=x/10;
}
}
int main() {
k[1]=1;
s[1]=1;
cin>>n;
for(int i=2; i<=n; i++) {
cheng(i);
jia();
}
for(int i=lb; i>=1; i--)
cout<<s[i];
}