演算法設計與分析基礎 大整數乘法string版

2021-07-03 17:57:01 字數 1849 閱讀 4180

#include#include#include#include#includeusing namespace std;

class bigdecimal

bigdecimal(string n)

bigdecimal operator + (bigdecimal b)

else

//開始進行加法運算

while(j>=0)

else

i--;

j--;

} //如果l遍歷完後,進製仍然為1,就要消耗進製直到它為0

while(i>=0 && temp==1)

else

} //如果到達最高位後還有進製,則該數最前面加個'1'

if(temp)

return bigdecimal(s);

} bigdecimal operator - (bigdecimal b)

else

i--;

j--;

} //減完後如果借位仍然為1,消耗借位直到為0

while(i>=0 && temp)

else

} i=0;

//如果數字開頭為0,就除去

while(s.length() > 1)

else

} return bigdecimal(s);

} bigdecimal mul(string a,string b)

bigdecimal mul(string a,int n)

char *k=new char[n+1];

memset(k,'0',n*sizeof(char));

k[n]='\0';

string temp;

deletek;

return bigdecimal(a);

} void sub(int center,bigdecimal *s1,bigdecimal *s0)

else

} bigdecimal operator * (bigdecimal b)

bigdecimal temp , a1 , a0 , b1 , b0 , c2 , c1 , c0;

int maxbit=max(n.length() , b.n.length());

sub(maxbit/2 , &a1 , &a0);

b.sub(maxbit/2 , &b1 , &b0);

c2 = a1 * b1;

c0 = a0 * b0;

c1 = (a1 + a0) * (b1 + b0) - (c2 + c0);

return mul(c2.n , maxbit/2*2) + mul(c1.n , maxbit/2) + c0;

}};int main()

bigdecimal temp , a1 , a0 , b1 , b0 , c2 , c1 , c0;

int maxbit=max(n.length() , b.n.length());

sub(maxbit/2 , &a1 , &a0);

b.sub(maxbit/2 , &b1 , &b0);

c2 = a1 * b1;

c0 = a0 * b0;

c1 = (a1 + a0) * (b1 + b0) - (c2 + c0);

return mul(c2.n , maxbit/2*2) + mul(c1.n , maxbit/2) + c0;}

中修改

if(n.length()<=4 && b.n.length()<=4)

中的4為600,然後改mul(n,b.n)為你的原始乘法函式mul(string,string)

大整數演算法講解與分析ppt:

演算法設計與分析 大整數乘法

宣告 本文僅個人筆記 這裡面的o n 2 就是下面的我自己畫的小學乘法計算複雜度示意圖 這裡有個問題就是4次n 2乘法怎麼變成n log4的,等想好再來接著編輯吧 注意這裡的 是十進位製大整數進行相乘,而課本給出的是二進位制機器數進行相乘 xy a10 n 2 b c10 n 2 d ac10 n ...

演算法 大整數乘法

問題描述 求兩個不超過200位的非負整數的積。輸入形式 有兩行,每行是乙個不超過200位的非負整數,沒有多餘的前導0。輸出形式 一行,即相乘後的結果。結果裡不能有多餘的前導0,即如果結果是342,那麼就不能輸出為0342。樣例輸入 1234567890 9876543210 樣例輸出 1219326...

分治演算法 大整數乘法

用分治演算法程式設計實現兩個n 位十進位製大整數的乘法運算。分析 用分治演算法程式設計實現兩個n 位十進位製大整數的乘法運算。演算法描述 兩個十進位制的數 x y x a 10 n1 b y c 10 n2 d 則 x y a 10 n1 b c 10 n2 d 設乙個陣列,將其看做10000 進製...