博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FFT教你做乘法(FFT傅里叶变换)
阅读量:5357 次
发布时间:2019-06-15

本文共 1326 字,大约阅读时间需要 4 分钟。

 

FFT教你做乘法

 

题目描述

 

给定两个8进制正整数A和B(A和B均小于10000位),请利用离散傅里叶变换计算A与B的乘积。

 

输入

 

多组测试数据(组数不超过100)每组测试数据只有一行,包含两个正整数A和B。

 

输出

 

对于每组数据,输出一行,为A和B的乘积。

 

输入样例

 

1 72 17

 

输出样例

 

736 解题思路: 推荐博客(有助于理解FFT): 推荐博客(FFT之大数相乘):给出代码:
1 #include 
2 #define N 505050 3 4 using namespace std; 5 6 const double PI=acos(-1.0); 7 struct Vir 8 { 9 double re,im; 10 Vir(double _re=0.,double _im=0.):re(_re),im(_im) {} 11 Vir operator*(Vir r) 12 { 13 return Vir(re*r.re-im*r.im,re*r.im+im*r.re); 14 } 15 Vir operator+(Vir r) 16 { 17 return Vir(re+r.re,im+r.im); 18 } 19 Vir operator-(Vir r) 20 { 21 return Vir(re-r.re,im-r.im); 22 } 23 }; 24 25 26 void bit_rev(Vir *a,int loglen,int len) 27 { 28 for(int i=0; i
>=1; 36 } 37 if(p
=0?a[j]-'0':0.,0.); 87 for(int i=0,j=lenb-1; i
=0?b[j]-'0':0.,0.); 89 for(int i=0; i<=n; ++i) 90 { 91 ans[i]=0; 92 } 93 FFT(pa,loglen,n,1); 94 FFT(pb,loglen,n,1); 95 for(int i=0; i
0&&ans[pos]<=0; --pos) ;104 for(; pos>=0; --pos) printf("%d",ans[pos]);105 printf("\n");106 }107 return 0;108 }

 

 

 

转载于:https://www.cnblogs.com/zpfbuaa/p/5074750.html

你可能感兴趣的文章
core--线程池
查看>>
redux-effect
查看>>
他山之石:加载图片的一个小问题
查看>>
shell - 常识
查看>>
linux下编译复数类型引发的错误:expected unqualified-id before '(' token
查看>>
codeforces 1041A Heist
查看>>
Spring Cloud Stream消费失败后的处理策略(三):使用DLQ队列(RabbitMQ)
查看>>
bzoj1048 [HAOI2007]分割矩阵
查看>>
PKUWC2018 5/6
查看>>
As-If-Serial 理解
查看>>
洛谷P1005 矩阵取数游戏
查看>>
在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构
查看>>
无线通信基础(一):无线网络演进
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
linux清空日志文件内容 (转)
查看>>
Servlet接收JSP参数乱码问题解决办法
查看>>
Ajax : load()
查看>>
MySQL-EXPLAIN执行计划Extra解释
查看>>
Zookeeper概述
查看>>
Linux自己安装redis扩展
查看>>