給出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...