Hdu 1 402 FFT 大整数相乘 && Hoj10005
来源:互联网 发布:淘宝卖假货怎么处罚 编辑:程序博客网 时间:2024/05/18 02:01
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1402
A * B Problem Plus
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 14721 Accepted Submission(s): 2797
Problem Description
Calculate A * B.
Input
Each line will contain two integers A and B. Process to end of file.
Note: the length of each integer will not exceed 50000.
Note: the length of each integer will not exceed 50000.
Output
For each case, output A * B in one line.
Sample Input
1210002
Sample Output
22000
Author
DOOM III
a * b Problemhttp://acm.hnu.cn/online/?
A*BTime Limit: 1000ms, Special Time Limit:2500ms,Memory Limit:32768KBTotal submit users: 2791, Accepted users:2655Problem 10005 : No special judgementProblem descriptionYour task is to calculate a * b.
Inputinput will contains only two integer a, b. both are in the range -104 to 104
Outputoutput the result of a*b;
Sample Input
A*BTime Limit: 1000ms, Special Time Limit:2500ms,Memory Limit:32768KBTotal submit users: 2791, Accepted users:2655Problem 10005 : No special judgementProblem descriptionYour task is to calculate a * b.
Inputinput will contains only two integer a, b. both are in the range -104 to 104
Outputoutput the result of a*b;
Sample Input
1000 1Sample Output
1000Problem SourceHNU Contest
#include<iostream>#include<algorithm>#include<cstdio>#include<cmath>#include<cstring>using namespace std;const double pi = acos(-1.0);struct cpx{ double r,i; cpx(double r_=0,double i_=0):r(r_),i(i_){} cpx operator + (cpx a){return cpx(r+a.r,i+a.i); } cpx operator - (cpx a){return cpx(r-a.r,i-a.i); } cpx operator * (cpx a){return cpx(r*a.r-i*a.i,r*a.i+i*a.r); }};//进行FFT和IFFT前的反转变换,len必须取2的幂次方void change(cpx 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(cpx y[],int len,int on){ change(y,len); for(int h=2;h<=len;h<<=1){ cpx wm(cos(-on*2*pi/h),sin(-on*2*pi/h)); for(int j=0;j<len;j+=h){ cpx w(1,0); for(int k=j;k<j+h/2;k++){ cpx u=y[k]; cpx t=w*y[k+h/2]; y[k]=u+t; y[k+h/2]=u-t; w=w*wm; } } } if(on==-1) for(int i=0;i<len;i++) y[i].r/=len;}const int maxn = 200010;cpx x1[maxn],x2[maxn];char str1[maxn/2],str2[maxn/2];int sum[maxn],ok;int main(){ while(~scanf("%s%s",str1,str2)){ int len1=strlen(str1); int len2=strlen(str2); if(str1[0]=='-'){ ok++; for(int i=0;i<len1;i++) str1[i]=str1[i+1]; str1[--len1]='\0'; } if(str2[0]=='-'){ ok++; for(int i=0;i<len2;i++) str2[i]=str2[i+1]; str2[--len2]='\0'; } int len=1; while(len<len1*2||len<len2*2)len<<=1; for(int i=0;i<len1;i++) x1[i]=cpx(str1[len1-1-i]-'0',0); for(int i=len1;i<len;i++) x1[i]=cpx(0,0); for(int i=0;i<len2;i++) x2[i]=cpx(str2[len2-1-i]-'0',0); for(int i=len2;i<len;i++) x2[i]=cpx(0,0); fft(x1,len,1); //DFT fft(x2,len,1); for(int i=0;i<len;i++) x1[i]=x1[i]*x2[i]; fft(x1,len,-1); for(int i=0;i<len;i++) sum[i]=(int)(x1[i].r+0.5); for(int i=0;i<len;i++){ sum[i+1]+=sum[i]/10; sum[i]%=10; } len=len1+len2-1; while(sum[len]<=0&&len>0)len--; if(ok&1)printf("-"); for(int i=len;i>=0;i--) printf("%c",sum[i]+'0'); printf("\n"); } return 0;}
0 0
- Hdu 1 402 FFT 大整数相乘 && Hoj10005
- 大整数FFT乘法
- 【FFT】大整数乘法
- 大整数相乘问题
- 大整数相乘算法
- 大整数相乘算法!
- 大整数相乘
- 大整数相乘算法
- 大整数相乘
- 大整数相乘
- 大整数相乘
- 大整数相乘
- 大整数相乘
- 大整数相乘算法
- 大整数相乘
- 大整数相乘
- 大整数相乘
- 大整数相乘
- Leetcode|Combination Sum II[递归回溯]
- 本博客已搬家至博客园:www.cnblogs.com/liuwu265
- 整点 appium 中部分 api 的使用方法
- Mybatis: $与#的区别
- 《JavaScript》——宏观把控
- Hdu 1 402 FFT 大整数相乘 && Hoj10005
- 移动端开发之viewport、fiddler
- Chrome 控制台 如何调试 javascript
- hdu-4883- (Best Coder) TIANKENG’s restaurant
- 我认识的七个理想主义者
- [leetcode] permutations的讨论
- 在移动HTML5页面input类型采用number无法控制长度,以及右边显示难看的加减按钮
- C# 3种Timer比较
- 【Qt OpenGL教程】07:光照和键盘控制