題目描述
高精度乘,求兩個很大的非負整數相乘的結果。
輸入
2個非負整數,每個一行,每個整數不超過240位。
輸出
乙個整數,表示相乘的結果。
例子
為了和演算法對應方便,用上面數乘下面數的方法12
5×2512
5502
5312
5為了運算方便,將上面兩數倒置,得到的結果也為倒序下標0
1234
5678
910a[i]52
1b[j]52
c[i+j]52
1055
2521
3逆序輸出就可得到結果
演算法分析:
1.將相乘的數用字串讀入,倒序讀入陣列a,b中
2.設陣列a為a[i],b為b[j]
3. 從上圖可以看出,每位乘數和另乙個乘數相乘都要後移一位,如a[0]*b時,c的第一位為c[0+0],a[1]*b時,c的第一位為c[1+0],a[2]*b,c的第一位為c[2+0],可以使用巢狀迴圈來實現,則c陣列中每位相乘的值為:
c[i+j]=c[i+j]+a[i]*b[j];
4.c陣列由於只是加法,所以可以直接進製:
c[i+j+1]=c[i+j+1]+c[i+j]/10;
c[i+j]=c[i+j]%10;
**
#include
using
namespace std;
int a[
250]
,b[250
],c[
500]
;//兩數相乘,積的長度小於兩數長度之和
intmain()
for(i=
0;isize()
;i++
)//a[i]*b[j]
for(i=
0;isize()
;i++)}
}int p=0;
//從後往前找c中第一位非0數
for(i=s1.
size()
+s2.
size()
-1;i>=
0;i--)}
//從p位置倒序輸出c
for(i=p;i>=
0;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,...
演算法 高精度計算乘法1(高精度乘單精度)
題目描述 高精度乘單精度,a b。a是乙個很大的非負整數,但不超過240位,b是乙個非負整數不超過10000,求a b。高精度乘單精度的數學實現 1 2 5 25 25 50 125 諸位進製 3 1 2 512 5 2525 5012531 25實現步驟 1 string s讀入高精度數,int ...