/*
hdu 1402 A * B Problem Plus FFT 这是我的第二道FFT的题 第一题是完全照着别人的代码敲出来的,也不明白是什么意思 这个代码是在前一题的基础上改的 做完这个题,我才有点儿感觉,原来FFT在这里就是加速大整数乘法而已 像前一题,也是一个大整数乘法,然后去掉一些非法的情况 */
#pragma warning(disable : 4786)
#pragma comment(linker, "/STACK:102400000,102400000")
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <functional>
#include <map>
#include <set>
#include <vector>
#include <stack>
#include <queue>//priority_queue
#include <bitset>
#include <complex>
#include <utility>
/*
**make_pair()
**/
using namespace std;
const double eps=1e-8;
const double PI=acos(-1.0);
const int inf=0x7fffffff;
template<typename T> inline T MIN(T a,T b){return a<b?a:b;}
template<typename T> inline T MAX(T a,T b){return a>b?a:b;}
template<typename T> inline T SQR(T a){return a*a;}
inline int dbcmp(double a){return a>eps?(1):(a<(-eps)?(-1):0);} typedef __int64 LL;
int n;
const int size=400040;
int data[size/4];
int sum[size];
complex<double> x1[size],num1[size],num2[size]; void change(complex<double> y[],int len)
{
int i,j,k;
for(i = 1, j = len/2;i < len-1;i++)
{
if(i < j)swap(y[i],y[j]);
k = len/2;
while( j >= k)
{
j -= k;
k /= 2;
}
if(j < k)j += k;
}
}
void fft(complex<double> y[],int len,int on)
{
change(y,len);
for(int h = 2;h <= len;h <<= 1)
{
complex<double> wn(cos(-on*2*PI/h),sin(-on*2*PI/h));
for(int j = 0;j < len;j += h)
{
complex<double> w(1,0);
for(int k = j;k < j+h/2;k++)
{
complex<double> u = y[k];
complex<double> t = w*y[k+h/2];
y[k] = u+t;
y[k+h/2] = u-t;
w = w*wn;
}
}
}
if(on == -1)
for(int i = 0;i < len;i++)
y[i].real(y[i].real()/len);
}
char s1[size];
char s2[size];
int main() {
// your code goes here
int t,i,j;
int len,len1,len2;
//cin>>t;
while(gets(s1))
{
gets(s2);
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
len1=strlen(s1);
len2=strlen(s2);
//printf("%d %d",len1,len2);
len=1;
while(len<2*len1||len<len2*2) len<<=1;
for(i=len1-1,j=0;i>=0;--i,++j)
{
num1[j]=complex<double>(s1[i]-'0',0);
}
while(j<=len)
{
num1[j]=complex<double>(0,0);
++j;
}
for(i=len2-1,j=0;i>=0;--i,++j)
{
num2[j]=complex<double>(s2[i]-'0',0);
}
while(j<=len)
{
num2[j]=complex<double>(0,0);
++j;
}
fft(num1,len,1);
fft(num2,len,1);
for(i=0;i<len;++i)
{
num1[i]=num1[i]*num2[i];
}
fft(num1,len,-1); for(i=0;i<len;++i)
{
sum[i]=(int)(num1[i].real()+0.5);
}
for(i=0;i<len;++i)
{
sum[i+1]+=sum[i]/10;
sum[i]=sum[i]%10;
}
len=len1+len2-1;
while(sum[len]<=0&&len>0) --len;
for(;len>=0;--len)
{
printf("%c",sum[len]+'0');
}
printf("\n");
}
return 0;
}

hdu 1402 A * B Problem Plus FFT的更多相关文章

  1. HDU - 1402 A * B Problem Plus FFT裸题

    http://acm.hdu.edu.cn/showproblem.php?pid=1402 题意: 求$a*b$ 但是$a$和$b$的范围可以达到 $1e50000$ 题解: 显然...用字符串模拟 ...

  2. HDU 1402 A * B Problem Plus (FFT求高精度乘法)

    A * B Problem Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  3. HDU 1402 A * B Problem Plus (FFT模板题)

    FFT模板题,求A*B. 用次FFT模板需要注意的是,N应为2的幂次,不然二进制平摊反转置换会出现死循环. 取出结果值时注意精度,要加上eps才能A. #include <cstdio> ...

  4. HDU - 1402 A * B Problem Plus (FFT实现高精度乘法)

    题意:计算A*B,A,B均为长度小于50000的整数. 这是FFT在大整数相乘中的一个应用,我本来想用NTT做的,但NTT由于取模很可能取炸,所以base必须设得很小,而且效率也比不上FFT. A和B ...

  5. HDU 1402 A * B Problem Plus 快速傅里叶变换 FFT 多项式

    http://acm.hdu.edu.cn/showproblem.php?pid=1402 快速傅里叶变换优化的高精度乘法. https://blog.csdn.net/ggn_2015/artic ...

  6. hdu 1402 A * B Problem Plus (FFT模板)

    A * B Problem Plus Problem Description Calculate A * B. Input Each line will contain two integers A ...

  7. HDU 1402 A * B Problem Plus(FFT)

    Problem Description Calculate A * B.   Input Each line will contain two integers A and B. Process to ...

  8. FFT(快速傅立叶变换):HDU 1402 A * B Problem Plus

    Calculate A * B. Input Each line will contain two integers A and B. Process to end of file. Note: th ...

  9. HDU 1402 A * B Problem Plus ——(大数乘法,FFT)

    因为刚学fft,想拿这题练练手,结果WA了个爽= =. 总结几点犯的错误: 1.要注意处理前导零的问题. 2.一定要注意数组大小的问题.(前一个fft的题因为没用到b数组,所以b就没管,这里使用了b数 ...

随机推荐

  1. Zend框架2入门(一) (转)

    By Rob Allen, www.akrabat.com 修订0.1.2文件版权所有? 2011本教程的目的是给创建一个简单的数据库的介绍使用Zend Framework 2驱动的应用程序使用模型 ...

  2. 导出可执行的jar

    1.在你要导出的项目上单击右键,在弹出的右键菜单里选择:Export…选项. 2.在弹出的对话框里选择:,然后点击下边的Next; 3.在弹出的对话框里,点击选择导出后的jar存储路径以及文件名.(其 ...

  3. 在Linux系统安装VMware Tools

    --Install VMware Tools --复制VMware Tools-xxx.tar.gz到根目录 cd /tar -vzxf VMware Tools-xxx.tar.gzcd vmwar ...

  4. NuGet学习笔记(1)——初识NuGet及快速安装使用(转)

    关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录. 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package M ...

  5. python 下的数据结构与算法---8:哈希一下【dict与set的实现】

    少年,不知道你好记不记得第三篇文章讲python内建数据结构的方法及其时间复杂度时里面关于dict与set的时间复杂度[为何访问元素为O(1)]原理我说后面讲吗?其实就是这篇文章讲啦. 目录: 一:H ...

  6. Android开发手记(13) 几种Alertdialog的使用

    本文主要讨论七种形式的AlertDialog,及其编写方法. 1.退出 在用户退出的时候提示用户是否退出,含有“确定”和“退出”两个按键. btnExit.setOnClickListener(new ...

  7. html网页代码各种名称及作用

    基本Web页文件<HTML><HEAD><TITLE></TITLE></HEAD><BODY></BODY>< ...

  8. Win7下Solr4.10.1和IK Analyzer中文分词

    1.下载IK中文分词压缩包IK Analyzer 2012FF_hf1,并解压到D:\IK Analyzer 2012FF_hf1: 2.将D:\IK Analyzer 2012FF_hf1\IKAn ...

  9. Css溢出隐藏

    display: -webkit-box;-webkit-line-clamp: 2;     /*多少行数之后显示为省略...*/word-wrap: break-word;word-break: ...

  10. jquery与discuz冲去的解决方法

    把相应的JQUERY代码天下如下代码: <script type="text/javascript"> jQuery.noConflict(); </script ...