天天看點

【例1.4】高精除以低精

       輸入兩個正整數,求它們的商(做整除)。

【算法分析】

      做除法時,每一次的商的值都在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;
}