(若想檢視高精除以單精,鏈結)鏈結
嗯,這個還有點兒難度(雖然不常用),其實也不難,稍微講講吧!
在用豎式計算除法的時候,用減法模擬每次的相除,從高位到低位,每次減到不能再減為止,然後向後移一位。嗯,就這樣。
#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...