#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的數相乘,大數使用字串來進行儲存,較...