求助 不知道哪里出错了
#include <bits/stdc++.h>
using namespace std;
int b[1005]={0}, c[1005]={0};
int x[1005]={0}, y[1005]={0},d[1005]={0};
int ans[1005]={0}, lenans=1;
int e[1005]={0},f[1005]={0},g[1005]={0};
int lenc = 1,lenb;
void cheng(){
for(int i = 0; i < lenb; i++){
x[i] = b[i];
}
for(int i = 0; i < lenc; i++){
y[i] = c[lenc-i-1];
}
int lend = lenb + lenc;
memset(d,0,sizeof(d));
for(int i = 0; i < lenb; i++){
for(int j = 0; j < lenc; j++){
d[i+j] = d[i+j] + x[i] * y[j];
d[i+j+1] = d[i+j+1] + d[i+j]/10;
d[i+j] = d[i+j] % 10;
}
}
while(!d[lend-1] && lend != 0){
lend--;
}
for(int i = 0; i < lend; i++){
c[i] = d[lend-i-1];
}
lenc = lend;
return;
}
void add(){
memset(e,0,sizeof(e));
memset(f,0,sizeof(f));
memset(g,0,sizeof(g));
for(int i = 0; i < lenans; i++){
e[i] = ans[lenans-i-1];
}
for(int i = 0; i < lenc; i++){
f[i] = c[lenc-i-1];
}
int leng = lenans > lenc ? lenans :lenc;
for(int i = 0; i < leng; i++){
g[i] += (e[i]+f[i])%10;
g[i+1] = (e[i]+f[i])/10;
}
if(g[leng]>0){
leng++;
}
memset(ans,0,sizeof(ans));
lenans = leng;
for(int i = 0; i < leng; i++){
ans[i] = g[leng-i-1];
}
}
int main(){
int n;
scanf("%d", &n);
for(int i = 1; i <= n; i++){
c[0]=1;
lenc = 1;
for(int j = 1; j <= i; j++){
lenb = 0;
int k = j;
while(k){
b[lenb++] = k % 10;
k /= 10;
}
cheng();
}
add();
}
for(int i = 0; i <lenans; i++){
printf("%d", ans[i]);
}
return 0;
}
n=48
正确答案:12678163798554051767172643373255731925167694226950680420940313
我的答案:1267816379855310517671726433732557319251676942269410680420940313
对比一下,发现为啥4变成了31,5变成了41 1267816379855(31)0517671726433732557319251676942269(41)0680420940313
求求大佬解答,就48这个测试用例过不了