求大佬解答,就n=48这个测试用例出错了
查看原帖
求大佬解答,就n=48这个测试用例出错了
406145
挺住了!楼主2020/10/22 22:17

求助 不知道哪里出错了

#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这个测试用例过不了

2020/10/22 22:17
加载中...