记录编号 239887 评测结果 AAAAAAAEEE
题目名称 超强的乘法问题 最终得分 70
用户昵称 Gravatar0 是否通过 未通过
代码语言 C++ 运行时间 0.612 s
提交时间 2016-03-20 19:37:47 内存使用 19.40 MiB
显示代码纯文本
#include<cstdio>
#include<complex>
#include<cstring>
#include<cstdlib>
 
#define maxn 600010
 
using namespace std;
 
typedef complex<double> Ex;
double pi=acos(-1);
int n,m;
char s[maxn];
Ex a[maxn],b[maxn];
 
void fft(Ex* x,int n,int k)
{
	if(n==1) return;
	Ex l[n>>1],r[n>>1];
	for(int i=2;i<=n;i+=2)
		l[i>>1]=x[i-1],r[i>>1]=x[i];
	fft(l,n>>1,k),fft(r,n>>1,k);
	Ex wn(cos(2*pi/n),sin(2*k*pi/n)),w(1,0),t;
	for(int i=1;i<=n>>1;i++,w*=wn)
		t=w*r[i],x[i]=l[i]+t,x[i+(n>>1)]=l[i]-t;
	return ;
}
 
int main()
{
	freopen("bettermul.in","r",stdin);
	freopen("bettermul.out","w",stdout);
	scanf("%s",s+1);n=strlen(s+1);
	for(int i=1;i<=n;i++) a[i]=s[n-i+1]-'0';
	scanf("%s",s+1);m=strlen(s+1);
	for(int i=1;i<=m;i++) b[i]=s[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=1;i<=n;i++) a[i]=a[i]*b[i];
	fft(a,n,-1);
	int ans[maxn];memset(ans,0,sizeof(ans));
	for(int i=1;i<=n;i++) ans[i]=a[i].real()/n+0.5;
	for(int i=1;i<=m;i++) ans[i+1]+=ans[i]/10,ans[i]%=10;
	while(!ans[m]) m--;
	for(int i=m;i>0;i--) printf("%d",ans[i]);
	return 0;
	
}