这题递归式写法会爆栈?

P1919 【模板】高精度乘法 | A*B Problem 升级版

```cpp #include<bits/stdc++.h> using namespace std; #define MN 60060 #define db double const db pi=acos(-1.0); struct cpx{ db x,y; cpx(db xx=0,db yy=0){x=xx,y=yy;} }a[MN],b[MN]; cpx operator + (cpx a,cpx b){ return cpx(a.x+b.x , a.y+b.y);} cpx operator - (cpx a,cpx b){ return cpx(a.x-b.x , a.y-b.y);} cpx operator * (cpx a,cpx b){ return cpx(a.x*b.x-a.y*b.y , a.x*b.y+a.y*b.x);} int c[MN],tta,ttb; void FFT(int limit,cpx *a,int emm) { if(limit==1) return ; cpx a1[limit>>1],a2[limit>>1]; for(int i=0;i<=limit;i+=2) a1[i>>1]=a[i],a2[i>>1]=a[i+1]; FFT(limit>>1,a1,emm);FFT(limit>>1,a2,emm); cpx wn=cpx(cos(2.0*pi/limit),emm*sin(2.0*pi/limit)),w=cpx(1,0); for(int i=0;i<(limit>>1);i++,w=w*wn) { a[i]=a1[i]+w*a2[i]; a[i+(limit>>1)]=a1[i]-w*a2[i]; } } int main() { int n;char s1[MN],s2[MN]; scanf("%d%s%s",&n,&s1,&s2); for(int i=n-1;i>=0;i--) a[tta++].x=s1[i]-'0'; for(int i=n-1;i>=0;i--) b[ttb++].x=s2[i]-'0'; int limit=1;while(limit<=2*n) limit<<=1; FFT(limit,a,1);FFT(limit,b,1); for(int i=0;i<=limit;i++) a[i]=a[i]*b[i]; FFT(limit,a,-1); for(int i=0;i<=limit;i++) { c[i]+=(int) (a[i].x/limit+0.5); if(c[i]>9) { c[i+1]+=c[i]/10;c[i]%=10;if(i==limit) limit++; } } while(c[limit]==0) limit--; for(int i=limit;i>=0;i--) printf("%d",c[i]); return 0; } ```
by LittlePrincess @ 2018-02-23 20:27:43


不是单纯看你递归次数,还要看你传的参,每次都下传个cpx数组会爆也不奇怪啊..
by sigland @ 2018-03-15 18:05:40


~~你开数组开小了。。。~~ 题面上说的60000是数字长度,FFT怎么也得开2倍大小吧...
by nianheng @ 2018-03-27 08:10:50


|