高精度加 減 乘作業

2021-10-23 09:55:37 字數 2342 閱讀 7493

#include

#include

using

namespace std;

intmain()

, num2[

505]=;

int sum[

505]=;

cin >> a >> b;

int lena =

strlen

(a);

//計算長度

int lenb =

strlen

(b);

int len = lena > lenb ? lena : lenb;

//倒序儲存資料

for(

int i = lena-

1,j=

0; i >=

0; i--

,j++

) num1[j]

= a[i]

-'0'

;for

(int i = lenb -

1, j =

0; i >=

0; i--

, j++

) num2[j]

= b[i]

-'0'

;for

(int i =

0; i < lena || i < lenb; i++)}

//如果最後一位進製,總長加一

if(sum[len]

>0)

len++

;for

(int j = len-

1; j >=

0; j--

)return0;

}

#include

#include

using

namespace std;

char a[

10087

], b[

10087];

int num1[

10087]=

, num2[

10087]=

;int result[

10087]=

;int lena, lenb;

intsymbol()

if(num1[i]

> num2[i]

)return1;

else

return0;

}else

return0;

}int

main()

lena ^

= lenb ^

= lena ^

= lenb;

}//計算

for(

int i =

0; i < lena || i < lenb; i++)}

//消掉前面多餘的0

核心**(乘法運算部分)是由模擬乘法豎式算出來的:

(1) 數1的倒數第i位與數2的倒數第j位相乘所得到的值應存在結果的倒數第i+j-1位上。

(2) 如果結果的i+j-1位大於9,則進製到i+j位。

#include

#include

using

namespace std;

int i, j, len =0;

int lena, lenb;

char a[

2005

], b[

2005];

int num1[

2005]=

, num2[

2005]=

;int result[

2005]=

;int

main()

} len = i + j;

if(result[len +1]

!=0) len++

;while

(result[len]==0

&& len >1)

len--

;for

(i = len; i >

0; i--

) cout << result[i]

;return0;

}

高精度乘高精度

c a b a b均是高精度數 比如a 156,b 3,求a b 很容易知道答案是468,怎樣算的呢?首先讓3 6 18,然後向進一位,並且這位只保留8 讓3 5 進製1 16,然後向前進一位,並且這位只保留6 讓3 1 進製1 4,此時不向前進製,保留4 所以最終答案是468 通過這個例子我們再來...

高精度乘高精度

思路 用vector表示大整數,整數的低位存在陣列索引的低位 a x b c其中c的每一位 如第3位 是由a和b的相應位相乘累加,處理後得到 如 1 2,2 1 include using namespace std const int demical 10 void input string s,...

大數相乘「高精度乘低精度」和「高精度乘高精度」

二 高精度乘高精度 如下 由於計算機的儲存位元組有限,所以不能完整表示乙個很大整數的精確值,這時候就得用到其他的方法,稱之為高精度演算法。這裡的高精度乘法主要指按位模擬乘法,實際上就是模擬乘法的過程,也就是筆算的過程。高精度乘低精度,即乙個大數與乙個小於10000的數相乘,大數使用字串來進行儲存,較...