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;
}

浙公网安备 33010602011771号