輸入兩個正整數,求它們的商(做整除)。
【算法分析】
做除法時,每一次的商的值都在0-9,每次求得的餘數連接配接以後的若幹位得到新的被除數,繼續做除法。是以,在做高精度除法時,要涉及到乘法運算和減法運算,還有移位處理。當然,為了程式簡潔,可以避免高精度乘法,用0~9次循環減法取代得到商的值。這裡,我們讨論一下高精度數除以單精度數的結果,采取的方法是按位相除法。
【參考程式】
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char a1[100]; // 被除數是高精度,使用字元數組存儲
int b; // 除數是單精度,使用int存儲
int a[100], c[100], lena, lenc, x=0; // x是餘數
memset(a, 0, sizeof(a)); // 被除數
memset(c, 0, sizeof(c)); // 商
gets(a1); // 輸入被除數字元串
cin >> b; // 輸入除數
lena = strlen(a1);
for (int i=0; i<lena; i++) {
a[i+1] = a1[i] - 48;
}
for (int i=1; i<=lena; i++) { // 按位相除
c[i] = (x*10 + a[i]) / b;
x = (x*10 + a[i]) % b;
}
lenc = 1;
while (c[lenc]==0 && lenc<lena) {
lenc++; // 删除前導0
}
for (int i=lenc; i<=lena; i++) {
cout << c[i];
}
return 0;
}