Description
用高精度计算出S=1!+2!+3!+...n!)(n<=50)其中"!"表示阶乘,例如:5!=5*4*3*2*1Input
输入正整数NOutput
输出计算结果SSample Input
2Sample Output
3题目分析
常规的高精度计算。 用数组倒序存储每个高精度数据,第一个数x[0]存储每个数的长度。 #include<iostream> #include<cstring> #include<cstring> #include<iomanip> using namespace std; int a[1000]; int b[1000]; void f(int a[],int m) { //先乘 for(int i=1;i<=a[0];i++) a[i]=a[i]*m; //当前位数下处理进位 for(int i=1;i<=a[0];i++) { a[i+1]+=a[i]/10; a[i]%=10; } //处理增加的位数 while(a[a[0]+1]>0) { a[0]++; //位数增加 a[a[0]+1]=a[a[0]]/10; a[a[0]]%=10; } } void j(int a[],int b[]) { //两个高精度相加 if(a[0]<b[0]) a[0]=b[0]; //保证a[0]为两者最大位数 for(int i=1;i<=a[0];i++) { a[i]+=b[i]; a[i+1]+=a[i]/10; a[i]%=10; } //处理增加的位数 if(a[a[0]+1]>0) a[0]++; } void printa(int a[]) { for(int i=a[0];i>=1;i--) cout<<a[i]; } int main(){ int n; a[0]=1; a[1]=1; cin>>n; for(int i=1;i<=n;i++){ f(a,i); j(b,a); } printa(b); return 0; }