代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int sum[100],mul[100],t[100];
void i2BIG(int x,int *y){
int l=0;
while(x>0){
l++;
y[l]=x%10;
x/=10;
}
}
void mulBIG(int x,int *y,int *z){
z[0]=y[0];
for(int i=1;i<=z[0];i++) z[i]=x*y[i];
for(int i=1;i<=z[0];i++){
z[i+1]+=z[i]/10;
z[i]%=10;
}
while(z[z[0]+1]>0){
z[z[0]+1]+=z[0]/10;
z[0]%=10;
z[0]++;
}
}
void addBIG(int *x,int *y,int *z){
z[0]=max(x[0],y[0]);
for(int i=1;i<=z[0];i++){
z[i]=x[i]+y[i];
}
for(int i=1;i<=z[0];i++){
z[i+1]+=z[i]/10;
z[i]%=10;
}
while(z[z[0]+1]>0) z[0]++;
}
void printBIG(int *x){
for(int i=x[0];i>=1;i--){
printf("%d",x[i]);
}
}
void f(int n){
memset(mul,0,sizeof(mul));
i2BIG(1,mul);
for(int i=1;i<=n;i++){
mulBIG(i,mul,mul);
}
addBIG(sum,mul,sum);
}
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
f(i);
}
printBIG(sum);
return 0;
}
第三测试点的数据:
输入:22
标准输出:1177652997443428940313
我的输出:791354597913
计算器算的:1124000727777607680000