30行高精乘
强势压行...
#include<bits/stdc++.h> #define pi acos(-1) using namespace std; typedef complex <double> E; string s1,s2; int n,m,w[500000],maxn=0; E a[500000],b[500000]; void FFT(E *x,int n,int type){ if(n==1)return;E l[n>>1],r[n>>1]; for(int i=0;i<n;i+=2)l[i>>1]=x[i],r[i>>1]=x[i+1]; FFT(l,n>>1,type);FFT(r,n>>1,type); E wn(cos(2*pi/n),sin(type*2*pi/n)),w(1,0),t; for(int i=0;i<n>>1;i++,w*=wn)t=r[i]*w,x[i]=l[i]+t,x[i+(n>>1)]=l[i]-t; } int main(){ cin>>n; cin>>s1;n=s1.length(); cin>>s2;m=s2.length(); for(int i=0;i<n;i++)a[i]=s1[n-i-1]-'0'; for(int i=0;i<m;i++)b[i]=s2[m-i-1]-'0'; m=n+m;for(n=1;n<=m;n<<=1);FFT(a,n,1);FFT(b,n,1); for(int i=0;i<n;i++)a[i]=a[i]*b[i];FFT(a,n,-1); for(int i=0;i<n;i++)w[i]=(int)(a[i].real()/n+0.5); for(int i=0;i<n;i++) { if(w[i])maxn=i;w[i+1]+=w[i]/10;w[i]=w[i]%10; } for(int i=maxn;i>=0;i--) printf("%d",w[i]); printf("\n"); return 0; }