我输个 $4$ 你就 WA 了……
by 035966_L3 @ 2022-02-16 17:27:00
拆完后可能 $n>len-1$……
by 035966_L3 @ 2022-02-16 17:28:14
我测了一下,2的正整数次幂都是错了,我以为一轮分配就能把1分配完。 8 = 2 + 3 ,多出3,就2个数不够分。
```cpp
#include<iostream>
#include<algorithm>
using namespace std;
const int N=20005;
struct bignum{
int a[N],len;
void init(){
len=0;
for(int i=1;i<=N;i++)
a[i]=0;
}
bignum(){
init();
}
bignum(int s){
init();
while(s!=0){
a[++len]=s%10;
s/=10;
}
}
void show(){
for(int i=len;i>=1;i--)
cout<<a[i];
cout<<endl;
}
};
bignum operator * (bignum a,bignum b){
bignum ans;
ans.len=a.len+b.len-1;
for(int i=1;i<=a.len;i++){
for(int j=1;j<=b.len;j++){
int k=i+j-1;
ans.a[k]+=a.a[i]*b.a[j];
ans.a[k+1]+=ans.a[k]/10;
ans.a[k]=ans.a[k]%10;
}
}
if(ans.a[ans.len+1]!=0)ans.len++;
else if(ans.a[ans.len]==0)ans.len=1;
return ans;
}
int main(){
int n,len=1,a[10005];
cin>>n;
for(int i=2;;i++){
if(n-i<0) break; //可以等于
n-=i;
a[len++]=i;
}
for(int i=1;i<=n;i++){
a[len-i]++;
}
if(a[0]==1) a[len-1]++; //特判2的正整数次幂
for(int i=1;i<=len-1;i++)
cout<<a[i]<<' ';
cout<<endl;
bignum sum(1);
for(int i=1;i<=len-1;i++){
bignum b(a[i]);
sum=sum*b;
}
sum.show();
return 0;
}
```
终于AC了
by 痴人说梦wza @ 2022-02-17 10:39:26