40分,581以上的数据就不对了
查看原帖
40分,581以上的数据就不对了
150691
S飞速黑鱼崽B楼主2023/11/3 08:59

分解方案应该没问题,应该是高精的问题

#include<bits/stdc++.h>
using namespace std;
int a[200];//用于储存分解方案 
int b[200];//用于储存答案数组 
void print(int n) {//n为大整数的位数,由mul返回 
	for (int i=n;i>=1;i--) {
		cout<<b[i];
	}
}

int mul(int c[],int n) {//参数为数组和参与乘积的数的个数 
	int len=1;
	b[1]=1;
	for(int i=1;i<=n;i++) {
		for (int j=1;j<=len;j++){
			b[j]*=c[i];
		}
		for (int j=1;j<=len;j++){
			b[j+1]+=b[j]/10;
			b[j]%=10; 
		}
		len+=3;
		for(;!b[len];len--){}
	}
	return len;
}

int main() {
	int n,j=1,sum=0;
	cin>>n;
	if(n==3){
		cout<<"1 2"<<endl<<2;
		return 0;
	}
	if(n==4){
		cout<<"1 3"<<endl<<3;
		return 0;
	} 
	for (int i=2;sum<n;i++,j++) {
		a[j]=i;
		sum+=i;
	}
	int gap=sum-n;
	if (gap==0){
		j--;
		cout<<2;
		for(int i=2;i<=j;i++) {
			cout<<' '<<a[i];
		}
		cout<<endl;
		print(mul(a,j));
	}
	else if(gap==1) {
		j--;
		for(int i=2;i<=j;i++) {
			a[i-1]=a[i];
		}//j-1个数字 
		a[j-1]++;
		cout<<a[1];
		for(int i=2;i<j;i++) {
			cout<<' '<<a[i];
		}
		cout<<endl;
		print(mul(a,j-1));
	}
	else {
		j--;
		for(int i=gap-1;i<=j-1;i++){
			a[i]=a[i+1];
		}
		cout<<a[1];
		for(int i=2;i<j;i++) {
			cout<<' '<<a[i];
		}
		cout<<endl;
		print(mul(a,j-1));
	}
	return 0;
}

下面是输入输出:

580

2 3 4 5 6 7 8 9 10 11 12 13 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

21088057074257438631972757831680000000

581

2 3 4 5 6 7 8 9 10 11 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

-202394576-50738780065201431511040000000

有没有大佬能解惑一下为什么581开始就有奇怪的错误

2023/11/3 08:59
加载中...