大數相除「高精度除低精度」和「高精度除高精度」

2021-10-16 09:16:48 字數 1585 閱讀 1511

二、高精度除高精度

採用計算機做高精度除法時,模擬日常除法的步驟。但計算機不可能做「試商」,這時,我們可以採用減法來模擬"試商"的過程。演算法的步驟如下:

1、將除數移動和被除數對齊,位數不夠時,補0。

2、利用被除數減去除數,一直減到被除數小於除數,減的次數,就是「試商」的結果,每移動一次。

3、重複上述步驟,一直到被除數和除數的位數相等為止。

#include

using

namespace std;

vector<

int>

div(vector<

int>

&a,int b,

int&r)

//r是餘數,引用。

reverse

(c.begin()

,c.end()

);while

(c.size()

>

1&&c.

back()

==0) c.

pop_back()

;//去前導0

return c;

}int

main()

#include

using

namespace std;

int a[

100005];

int b[

100005];

int c[

100005];

intcompare

(int a,

int b)

return0;

//各位都相等返回0

}void

copyarray

(int p,

int q,

int m)

q[0]=p[0]

+m-1;}

void

sub(

int a,

int b)

if(flag==1)

//大於

a[i]

-=b[i];}

while

(a[0

]>

0&&a[a[0]

]==0) a[0]

--;}}

void

div(

int a,

int b,

int c)

}while

(c[0

]>

0&&c[c[0]

]==0) c[0]

--;}void

print

(int a)

//輸出

for(

int i=a[0]

;i>

0;i--

) cout<}int

main()

for(

int i=

1;i<=b[0]

;i++

)div

(a,b,c)

;print

(c);

print

(a);

return0;

}

高精度除高精度

演算法流程 第一步,讀入被除數 a 和 除數 b,判斷是否 a b,是則輸出 0 並結束演算法,否則令 answer 0 第二步,令餘數 remainder 0,令 i 從被除數最高位的下標開始 第三步,令 remainder remainder 10 a i 令 c 9 第四步,判斷是否 b c ...

大數相乘「高精度乘低精度」和「高精度乘高精度」

二 高精度乘高精度 如下 由於計算機的儲存位元組有限,所以不能完整表示乙個很大整數的精確值,這時候就得用到其他的方法,稱之為高精度演算法。這裡的高精度乘法主要指按位模擬乘法,實際上就是模擬乘法的過程,也就是筆算的過程。高精度乘低精度,即乙個大數與乙個小於10000的數相乘,大數使用字串來進行儲存,較...

9111 高精度除法 高精度除高精度

time limit 1 second memory limit 2 mb 問題描述 輸入兩個高精度非0整數,輸出它們的整數商 不考慮小數部分 輸入只有兩行,第一行乙個整數x,第二行乙個整數y。其中0 x 10 200,0 y 10 200 輸出有1行,為兩個數的整數商。22222222223333...