高精度演算法的兩個基本問題:高精度數的表示和高精度數的基本運算
1.高精度數的表示:
首先我想到的是do while 迴圈逆序存放在陣列之中,但書中用string接受並且將其轉化成數字,存放在陣列之中
int arr[100];
string str;
cin >> str;
int len = str.length();
for(int i=0;istr[n-i-1]-'0';
}
有了上面的操作前提,我們可以對其進行簡單的操作
2.高精度數的基本運算:
//前提:兩個非負數整型按上述順序存放在陣列a,和陣列b中
for(int i=0;i}
(2) 高精度的減法
演算法思想:兩個非負數整型a,b,先考慮a>b的情況,倘若對應的相減時,被減數的該位數值不足以被減數該位值相減,需要向高位減數,對應陣列操作便是陣列對應值自減;而 a < b的情況只需求出b-a的值,取負即可;
//前提:比較大數存放咋a陣列之中,小數存放在b陣列之中
for(int i=0;i//num是較大數的位數
if(a[i]>=b[i]) //無進製情況
a[i]=a[i]-b[i];
else
}
(3)高精度乘法依賴於高精度加法:
演算法思想:將乘數和被乘數的對應權位值對應值相乘,依次存放的第三個陣列之中,對應下標累加權位指數相同者,結束後只需值第三個陣列進行依次的進製操作即可
舉列:256*378
256可以表示為:200(權位值為2)+50(1)+6(0)
378表示為:300(2)+70(1)+8(0)
存入陣列後為:256:a[0]=6,a[1]=5,a[2]=2
378:b[0]=8,b[1]=7,b[2]=3
組合權位得:c[0]存放6*8
c[1]=6*7+5*8
c[2]=5*7+6*3+2*8
c[3]=5*3+2*7
c[4]=2*3
驗算:256*378=96768
陣列相加得:6*8+(6*7+5*8)*10+(5*7+6*3+2*8)*100+(5*3+2*7)*1000+(2*3)*10000 = 96768 成立
(4)高精度乘法
***************===坑*************************===
高精度演算法(加減乘除)
最近開始學習解決大數問題,在這裡記錄下自己的學習情況。問題描述 我有乙個非常簡單的問題。給定兩個整數a和b,你的工作是計算a b的和。輸入 輸入的第一行包含整數t 1 t 20 表示測試用例的數量。然後是t行,每行包含兩個正整數,a和b.請注意,整數非常大,這意味著您不應該使用32位整數來處理它們。...
高精度演算法(加減乘除)
在遇到一些例如1e 100000這樣的資料的時候,我們無法處理,那麼我們需要高精度來處理,用long long都沒有辦法處理,利用高精度處理方法是用字串的手法處理。高精度加法 思路 就是我們人類的加法,從最小位數開始,先算好以後再進行進製操作即可,考慮進製的問題。include using name...
高精度加減乘除
一。高精度乘法 敲了好久。頭禿 str1,str2是存數字的字串,返回最後的位數,c儲存結果 int highmult char str1,char str2,int c b len2 1 int i,j memset a,0,sizeof a memset b,0,sizeof b memset ...