大數除法(C )

2022-04-17 14:09:43 字數 1467 閱讀 1372

大數除法

不同於一般的模擬,除法操作步數模仿手工除法,而是利用減法操作實現的。

其基本思想是反覆做除法,看從被除數裡面最多能減去多少個除數,商就是多少。

逐個減顯然太慢,要判斷一次最多能減少多少個整的10的n次方。

以7546除23為例。

先減去23的100倍,就是2300,可以減3次,餘下646。   此時商就是300;

然後646減去23的10倍,就是230,可以減2次,餘下186。此時商就是320;

然後186減去23,可以減8次,此時商就是328.

1 #include2 #include3 #include4

using

namespace

std;

5const

int l=110;6

int sub(int *a,int *b,int la,int

lb)7

16for(int i=0;i//

高精度減法

1721

for(int i=la-1;i>=0;i--)

22if(a[i]) return i+1;//

返回差的位數

23return

0;//

返回差的位數

2425}26

string div(string n1,string n2,int nn)//

n1,n2是字串表示的被除數,除數,nn是選擇返回商還是餘數

27//

如果a36

int t=la-lb;//

除被數和除數的位數之差

37for(int i=la-1;i>=0;i--)//

將除數擴大10^t倍

38if(i>=t) b[i]=b[i-t];

39else b[i]=0

;40 lb=la;

41for(int j=0;j<=t;j++)

4249}50

for(i=0;i10;i++) r[i+1]+=r[i]/10,r[i]%=10;//

統一處理進製

51while(!r[i]) i--;//

將整形陣列表示的商轉化成字串表示的

52while(i>=0) s+=r[i--]+'0'

;53//cout<54 i=tp;

55while(!a[i]) i--;//

將整形陣列表示的餘數轉化成字串表示的

56while(i>=0) v+=a[i--]+'0'

;57if(v.empty()) v="0"

;58//cout<59

if(nn==1) return

s;60

if(nn==2) return

v;61}62

intmain()

6369

return0;

70 }

C 大數除法

提供一種有關 c 大數除法的思路。用二分的方式,尋找答案。用 mid 被除數,若大於除數,則縮小右端點,若小於除數,則縮小左端點。最後可以得到 答案。本人採取這個方法,得到的數字比答案大一,所以要減去一 最後要注意的是,mid 被除數 有越界的可能。我設定了,如果越界,則返回0,然後在 二分的迴圈 ...

C 實現大數除法

題外話 大數除法無疑是大數操作裡最麻煩的一項,寫大數不實現除法無異於畫龍無鱗。思路 最原始的,腦子最容易冒出來的思路,是一下一下的減,看能累計減多少次,最後的總次數就是結果,但這樣的效率實在太慢。但我們可以一次性減去 除數的1,10,100,1000倍,只要它在當前倍數下比被除數小。例如 1210 ...

高精度除法 大數除法

問題描述 給出兩個正整數,計算a b的值,保證a和b的位數不超過500位。輸入描述 輸入兩個用空格隔開的正整數。輸出描述 輸出a b的值。樣例輸入 500 2 樣例輸出 250 解題思路 大數除法的實現有兩種方式 1 用a b,迴圈,直到a 計算過程 擴充套件b的位數 a.length b.lent...