題解5 高精度減法

2021-10-01 11:07:55 字數 1491 閱讀 7570

基本思路:對於給定的兩個數值,把其當成字串,進一步轉化成整型,逆序存放在整型陣列中,對其每乙個位進行相減,但是要注意借位的使用,最後為了保險在設定乙個迴圈,把前置0去掉,最後輸出結果。

ac**:

#include

#include

#include

#define n 100010

using

namespace std;

intmain()

, b[n]

=,c[n]=;

//定義用作轉化成整型存放的陣列

int la,lb,i,t=0;

la=strlen

(sa)

;//計算長度

lb=strlen

(sb)

;//計算長度

for(i = la-

1; i >=

0; i--

) a[la-i-1]

=sa[i]

-'0'

;//把第乙個數逆序存放到整型陣列中

for(i = lb-

1; i >=

0; i--

) b[lb-i-1]

=sb[i]

-'0'

;//把第二個數逆序存放到整型陣列中

while

(a[la-1]

==0) la--;

//如果有0的話,就去掉

while

(b[lb-1]

==0) lb--;

int max=la;

if(max

max=lb;

//求最大長度 if(

strcmp

(sa,sb)==0

)//相等時

else

if(la

(la == lb&&

strcmp

(sa,sb)==-

1))//當被減數大於減數的時候進行交換,並輸出'-'號

printf

("-");

}for

(i=0

;i)//對於每乙個小單位進行減法運算

c[i]

=a[i]

-b[i]

;//把結果存放到 乙個新的陣列中

}for

(;i>=

0;i--)if

(c[i]!=0

)break

;//去掉結果前面的0

for(

;i>=

0;i--

)printf

("%d"

,c[i]);

//輸出結果

return0;

}

注意:

1.借位要熟練其規則

2.涉及到負數和0比較麻煩,需要對其進行限制

高精度減法

題目描述 高精度減法 輸入輸出格式 輸入格式 兩個數 第二個可能比第乙個大 輸出格式 結果 是負數要輸出負號 輸入輸出樣例 輸入樣例 1 2 1 輸出樣例 1 1說明 這也沒什麼好說的,沒什麼特別的要求,就是乙個普普通通的高精減。程式如下 const max 500 var s integer a,...

高精度減法

description 輸入兩個整數a和b,輸出這兩個整數的差。a和b都不超過100位。input 輸入包括兩行,第一行為乙個非負整數a 被減數 第二行為乙個非負整數b 減數 兩個整數都不超過100位,兩數的最高位都不是0。output 輸出一行,表示a b的值。sample input 99999...

高精度減法?!

高精減 嗯輸入就不再講一遍了。儲存和之前是一樣的,倒序儲存。減法需要借位,所以解決減法借位是關鍵。方法如下 if a i a i 1 向上一位借一做十 a i 10 c i a i b i 逐位相減這樣就可以處理借位問題。當然,在減法中還有乙個需要處理的問題,當然這個問題很重要 減法中有被減數和減數...