高精度除法

本文深入探讨了高精度除法的实现原理,通过字符串表示的大数进行除法运算,包括大数之间的比较、减法操作,以及如何按位进行除法计算。同时,文章还介绍了如何使用整型变量进行高精度除法的简化处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

除法的本质其实就是减法,按位找到可以除的就除

bool cmp(string a,string b)
{
	int len1=a.length(); 
	int len2=b.length();
	if( len1==len2 )
	{
		for(int i=0;i<len1;i++)
		{
			if( a[i]<b[i] ) return false;
			else if( a[i]>b[i] ) return true;
		}
		return true;
	}
	return len1>len2?true:false;
}

string divide(string a,string b)
{
	string res;
	string temp;
	if( !cmp(a,b) ) return "0";   a<b的情况
	int len1=a.length();
	int len2=b.length();
	int flag=0;
	for(int i=0;i<len1;i++)
	{
		int num=0;
		temp+=a[i];				//给temp加位数
		while( cmp(temp,b) )			//如果此时temp>=b,说明可以减,即对应的商不为0
		{
			flag=1;
			temp=sub(temp,b);   //减法代码详见另一篇博客
			num++;    //可以减的话,减一次对应的商的位数加1
		}
		if( temp=="0" ) temp.clear();    //temp被减完了就clear掉
		if( flag ) res+=num+'0';
	}
	return res;
}

高精度除int

按位除就好

string div(string a,int b)
{
	string res;
	int len = a.length();
	vector<int> ans(len);
	int temp = 0;
	for( int i = 0 ; i < len ; i++ )
	{
		temp = temp * 10 + (a[i] - '0');
		ans[i] = temp / b;
		temp %= b;  
	}
	for( int i = 0 ; i < len ; i++ )
	{
		char t = ans[i] + '0';
		if( res.empty() && t == '0' ) continue;
		res += t;
	}
	return res;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值