最后一个点WA,来个人帮忙看看

P1249 最大乘积

我输个 $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


|