高精度除法(高精除以高精)模板

2021-09-29 06:10:22 字數 2173 閱讀 4149

(若想檢視高精除以單精,鏈結)鏈結

嗯,這個還有點兒難度(雖然不常用),其實也不難,稍微講講吧!

在用豎式計算除法的時候,用減法模擬每次的相除,從高位到低位,每次減到不能再減為止,然後向後移一位。嗯,就這樣。

#include

using

namespace std;

int c[

300]

;char ch1[

300]

,ch2[

300]

,ans[

300]

;bool

cmp(

int p,

char ch1,

char ch2)

//對前p位的被除數字串ch1和整個除數字串ch2比較大小

tch[cnt+1]

='\0';if

(strlen

(tch+1)

>

strlen

(ch2+1)

||(strlen

(tch+1)

==strlen

(ch2+1)

&&strcmp

(tch+

1,ch2+1)

>=0)

)return

true

;//如果被除數字數比除數字數多,被除數大

//如果兩者位數相等,根據字母序比較兩個字串大小即可

else

return

false;}

void

subtraction

(int p,

char ch1,

char ch2)

int ta[

300]

,tb[

300]

;memset

(ta,0,

sizeof

(ta));

memset

(tb,0,

sizeof

(tb));

int len2=

strlen

(ch2+1)

;for

(int i=

1;i<=cnt+

1;i++

) ta[i]

=tch[cnt+

1-i]

-'0'

;//把被除數要相減的部分轉化為整數陣列

for(

int i=

1;i<=len2;i++

) tb[i]

=ch2[len2+

1-i]

-'0'

;//把除數轉化為整數陣列

int tc[

300]

;memset

(tc,0,

sizeof

(tc));

for(

int i=

1;i<=cnt+

1;i++

)//高精度減法模板

tc[i]

=ta[i]

-tb[i];}

for(

int i=

1;i<=cnt+

1;i++)}

void

add_ans

(int p)

intmain()

}int l1=

1,l2=1;

while

(ans[l1]==0

&&l1<=len1-

1) l1++

;//刪除儲存商的陣列中的多餘的前導0

for(

int i=l1;i<=len1;i++

)printf

("%d"

,ans[i]);

//ans即為儲存商的陣列

cout

(ch1[l2]

=='0'

&&l2<=len1-

1) l2++

;//刪除餘數中多餘的前導0

for(

int i=l2;i<=len1;i++

)printf

("%c"

,ch1[i]);

//ch1(被除數陣列)剩餘的即為相除餘數

return0;

}

嗯,還是比較有難度,結合豎式相除的過程再理解一下,應該不會有太大問題。(記住:用高精度減法模擬每位相除的過程)

高精度計算 除法 高精除以低精

高精度就是很長很長的數字 低精就是可以直接存在基本型別 int short double.的數字 兩個正整數,乙個是高精度,乙個是低精度,求整除部分,不求餘數。其實就算要負數也很好解決 兩個正整數,高精度除以低精度,只求整除部分,不求餘數 include include include using ...

c 高精除以高精

include using namespace std int a 1000 b 1000 int len1,len2,len int index int re 1000 p 0 記錄結果 intjudge return0 int main for i 0 isize i len1 n.size l...

高精度乘法入門詳解(高精乘高精)

高精度乘法。輸入兩個正整數,求它們的積。類似加法,可以用豎式求乘法。在做乘法運算時,同樣也有進製,同時對每一位進行乘法運算時,必須進行錯位相加,如圖3 圖4。分析c陣列下標的變化規律,可以寫出如下關係式 ci c i c i 由此可見,c i跟a i b j 乘積有關,跟上次的進製有關,還跟原c i...