51NOD1028 大數乘法 V2

2022-08-14 00:36:20 字數 1296 閱讀 6667

給出2個大整數a,b,計算a*b的結果。

(a,b的長度 <= 100000,a,b >= 0)

把大整數

a看做乙個次數界為le

na的多項式a(

x),其中x=10

, 同樣,把

b看做乙個次數界為le

nb的多項式b(

x),其中x=10

。然後套上快速傅利葉變換

#include

#include

#include

#include

#include

using

namespace

std;

const

char* fin="ftt.in";

const

char* fout="fttx.out";

const

int inf=0x7fffffff;

const

double pi=acos(-1),eps=10e-6;

const

int maxn=400007;

struct z

z operator +(const z &b)

z operator -(const z &b)

z operator *(const z &b)

}a[maxn],b[maxn],t[maxn];

int ans[maxn],lena,lenb,n,n,i,j,k;

void read(z *a,int &len)

void getn()

int fan(int v)

return k;

}void fft(z *a,int sig)

while (!ans[n]) n--;

for (;n>=0;n--) printf("%d",ans[n]);

return

0;}

pay attention

1.read()中,不要把len打成lena;

翻轉大整數時,是從0列舉到(len+1)/2;

2.getn()中,n最後要再乘一次2,因為:

a*b的次數界是lena*lenb。

3.maxn要開到4倍;

4.pi=acos(-1);

5.當對乙個小數x用int()取整時,需要打成int(x+eps),其中,eps=10e-6。

51nod 1028 大數乘法v2

基準時間限制 2 秒空間限制 131072 kb分值 80難度 5級演算法題 給出2個大整數a,b,計算a b的結果。input 第1行 大數a 第2行 大數b a,b的長度 100000,a,b 0 output 輸出a binput示例 123456 234567 output示例 289587...

51nod1028 大數乘法 V2 問題 壓位

本來是應該用fft的,但是我不會.於是就直接把每六位壓成一位上高精乘就好啦。不過注意由於取模操作常數巨大,不能每次都執行,應該是全部做完從後往前掃一遍進製。然後就o len2 過2萬 1 include2 include3 include4 typedef long long ll 5 using ...

FFT版題 51 Nod 1028 大數乘法

數的長度為105 10 5 105,乘起來後最大長度為2 1 05 2 times10 5 2 10 5由於fft需要把長度開到2 22的次冪,所以不能只開到2 1 05 2 times10 5 2 10 5,會tle 卡了好久,還以為是要壓位 include include include inc...