高精度演算法,加減乘除

2021-07-28 04:31:36 字數 1259 閱讀 4715

高精度演算法的兩個基本問題:高精度數的表示和高精度數的基本運算

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