高精度乘法

2021-10-07 21:47:07 字數 1468 閱讀 4111

1.先處理字元的符號位

2.將字元處理後壓入整數陣列中(倒序壓入,方便後面的處理)

3.用模擬乘法的出積儲存在另乙個陣列中

倒序的目的是為了對其相乘的時候的第一位,每一次相乘得到的數處理進製後得到的數字才是應該儲存的數字,此過程與我們做乘法運算相似,可以看下面**的注釋

4.處理前置0後,處理前置0用最不利原則,然後輸出,注意正數負數或者負數正數為負數,先輸出乙個0

//高精度乘法

#include

#include

#define max 1000

//可以修改

char s1[max]

;//第乙個字串

char s2[max]

;//第二個字串

int a[max]

;//乘數

int b[max]

;//第二個乘數

int c[max]

;//積

int main()

bool flag_b=

true;if

(s2[0]

=='-'

)//將數存入int陣列

int len_a=

strlen

(s1)

;for

(int i=

0;i) a[i]

=s1[len_a-i-1]

-'0'

; int len_b=

strlen

(s2)

;for

(int i=

0;i) b[i]

=s2[len_b-i-1]

-'0'

;//模擬乘法

int jw;

//進製

for(int i=

0;i) c[i+len_b]

=jw;

//最後的乙個進製,我們多算乙個

}//c處理前置0

int len_c=len_a+len_b;

for(int i=len_c-

1;i>=

0;i--)if

(c[i]==0

&&len_c>1)

//沒有等於1是因為最後一位為0,即相乘後為0

len_c--

;else

break

;//輸出if(

((flag_a==

true

&&flag_b==

false)||

(flag_a==

false

&&flag_b==

true))

&&c[len_c-1]

!=0)printf

("-");

if(c[len_c-1]

==0)printf

("0\n");

else

return0;

}

高精度減法,高精度乘法

高精度減法 oj資料偏弱如果新增乙個101 2就錯了,下面這一步是為了防止錯誤的 if a aa 0 可能出現第一位的1被借走的的情況,所以加乙個while找第乙個不是0的 while c i 0 i include include include include include include u...

高精度乘法

問題描述 給你兩個正整數a,b,計算它們的乘積。輸入格式 第一行乙個正整數a 第二行乙個正整數b 輸出格式 一行,表示a b 樣例輸入 111222333444555666777888999 999888777666555444333222111 樣例輸出 提示 a,b分別不超過100000位 ff...

高精度乘法

include include include includeusing namespace std const int maxn 5000 inline int get struct data data operator const data b for int i 1 i c.len i whi...