【例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;
}

发布了49 篇原创文章 · 获赞 0 · 访问量 1035

猜你喜欢

转载自blog.csdn.net/developer_zhb/article/details/105004479