poj2389 大數乘法

2022-05-16 20:23:11 字數 978 閱讀 4638

#include#include

#include

#define max 100

intmain()

; scanf(

"%s %s

",s1,s2);

len1=strlen(s1);

len2=strlen(s2);

for(i=0;i)

}for(i=len1+len2-2;i>=1;i--)//

因為最後一項result[len1-1+len2-1]

}//當i=1,result[0]是進了位的,他有可能大於9,甚至result[1]給他進幾十,所以直接輸出

for(i=0;i<=len1+len2-2;i++)

return0;

}

view code

演算法思路:輸入如:3456

用3分別乘7、8、9,用4分別乘7、8、9,5分別乘7、8、9,01

2334

5678

96分別乘7、8、9

若按照res[i+j]=s1[i]*s2[j],得到res:01

2345

2124

2728

3236

3540

4542

4854

res陣列本身是1維的,只有一排,外部的for迴圈每進完一次,res陣列就被更新一次

發現規律:len1=4,len2=3,最後一位是res[len1-1+len2-1]

將得到的res陣列從最後一位開始進製,巧妙的是,邏輯上if(res>9)更好,不加,也沒問題

result[i-1]+=(result[i]/10

); result[i] %= 10;

讓前一位進好位,又保留這一位的餘數,我只讓這段**做到了res[1],但在res[0]處進了位

聯絡大數加法:poj1503

同樣的定義乙個res(fin)陣列

POJ2389 高精度乘法

直接上 了 include include include include include include include include include include define ll long long define max a,b a b?a b define min a,b a 0 i ...

POJ 1001 大數的乘法

對這道題的理解 大數的乘法 關鍵是 實型的 那麼首先就是數出來小數點有幾位這個相信很簡單 從後面往前數剛開始0 不算接著就是遇到小數點結束如果沒有小數點 那麼置為0 接著就是輸出地時候首先算出小數點的位置然後輸出 你想怎麼樣都行 從後往前數這個時候輸出 那麼就是你也知道了 嘿嘿 剩下的就是 大數的乘...

6 大數乘法

對於32位字長的機器,大約超過20億,用int型別就無法表示了,我們可以選擇int64型別,但無論怎樣擴充套件,固定的整數型別總是有表達的極限!如果對超級大整數進行精確運算呢?乙個簡單的辦法是 僅僅使用現有型別,但是把大整數的運算化解為若干小整數的運算,即所謂 分塊法 如圖 1.jpg 表示了分塊乘...