hdu 1402(FFT+大数乘法)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1402;

题目分析:大数乘法有很多种计算方式,但可以转换成多项式相乘就可以使用FFT进行计算,第一次接触傅里叶变换,具体FFt推荐一篇文章;

代码如下:

重载*的:

#include 
#include 
#include 
#include 
#include 

using namespace std;
const int N = 500005;
const double PI = acos(-1.0);

struct Virt{
    double r,i;
    Virt(double r=0.0,double i=0.0){
        this->r=r;
        this->i=i;
    }
    Virt operator+(const Virt &x){
        return Virt(r+x.r,i+x.i);
    }
    Virt operator-(const Virt &x){
        return Virt(r-x.r,i-x.i);
    }
    Virt operator*(const Virt &x){
        return Virt(r*x.r-i*x.i,i*x.r+r*x.i);
    }
};
//雷德算法--倒位序
void Rader(Virt F[],int len){
    int j=len>>1;
    for(int i=1;i> 1;
        while(j>=k){
            j-=k;
            k>>=1;
        }
        if(j=0;i--)
    sum[i]=(int)(va[i].r+0.5);
    for(int i=0;i=0;i--){
        if(sum[i]!=0){
            k=i;
            break;
        }
    }
    for(int i=k;i>=-0;i--)
    str+=(char)(sum[i]+'0');
    return str;
}
string a,b;
int main(){
    while(cin>>a>>b){
        cout<

这个就是运行比较慢,但个人比较喜欢。

下面这个是函数版本的:

#include 
#include 
#include 
#include 
#include 

using namespace std;
const int N = 500005;
const double PI = acos(-1.0);

struct Virt{
    double r,i;
    Virt(double r=0.0,double i=0.0){
        this->r=r;
        this->i=i;
    }
    Virt operator+(const Virt &x){
        return Virt(r+x.r,i+x.i);
    }
    Virt operator-(const Virt &x){
        return Virt(r-x.r,i-x.i);
    }
    Virt operator*(const Virt &x){
        return Virt(r*x.r-i*x.i,i*x.r+r*x.i);
    }
};
//雷德算法--倒位序
void Rader(Virt F[],int len){
    int j=len>>1;
    for(int i=1;i> 1;
        while(j>=k){
            j-=k;
            k>>=1;
        }
        if(j=0;i--)
    sum[i]=(int)(va[i].r+0.5);
    for(int i=0;i=0;i--){
        if(sum[i]!=0){
            k=i;
            break;
        }
    }
    for(int i=k;i>=-0;i--)
    printf("%d",sum[i]);
    puts("");
}
int main(){
    while(scanf("%s%s",str1,str2)!=EOF){
        solve(str1,str2);
    }
    return 0;
}
/*处理fft时实数化整数要四舍五入;*/


你可能感兴趣的:(North--数论,North--快速傅里叶变换,北门的智慧——数论)