分解方案应该没问题,应该是高精的问题
#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开始就有奇怪的错误