c++中資料儲存的範圍是有限的,最長的longlong型最大只能儲存2^63-1。如果要是需要儲存更大的數就只能使用陣列了。這樣儲存的數的運算需要另外編寫程式。
這裡介紹高精度乘法
這種乘法的運算類似於小學學習的豎式,從個位開始,乙個乘數逐位乘另乙個乘數,再將結果相加。
首先我們需要先讀入資料,這裡使用乙個字串讀入,由於讀入時首位是最大位,而運算時需要從個位開始,再將字串反序的儲存到乙個整形陣列之中,字串的儲存採用的是ascii碼,轉換時,需要減去』0』。
乙個乘數從第一位開始遍歷,分別去乘另乙個乘數,注意的是每次乘完一輪後,下一次乘都需要將結果從下一位開始,就是說最後的相加是錯位的。如果等到最後加,會比較麻煩,所以沒乘完一次就相加,注意此處的進製包括加起來的進製和之前乘時的進製
最後去掉前導0(0*100000=000000),反序輸出
#include
#include
#include
using
namespace std;
const
int n=
1e6;
int a[n]
,b[n]
,ans[n]
;string s1,s2;
intmain()
ans[k]
=tmp;
//最後可能都乘完,還剩下進製
}int i;
for(i=k;i>
1;i--)if
(ans[i]!=0
)//除0
break
;for
(;i;i--
)//反序輸出
cout<;return0;
}
高精度減法,高精度乘法
高精度減法 oj資料偏弱如果新增乙個101 2就錯了,下面這一步是為了防止錯誤的 if a aa 0 可能出現第一位的1被借走的的情況,所以加乙個while找第乙個不是0的 while c i 0 i include include include include include include u...
高精度乘法
問題描述 給你兩個正整數a,b,計算它們的乘積。輸入格式 第一行乙個正整數a 第二行乙個正整數b 輸出格式 一行,表示a b 樣例輸入 111222333444555666777888999 999888777666555444333222111 樣例輸出 提示 a,b分別不超過100000位 ff...
高精度乘法
include include include includeusing namespace std const int maxn 5000 inline int get struct data data operator const data b for int i 1 i c.len i whi...