高精度除法的实现

06-29 1172阅读

        高精度除法与高精度加法的定义、前置过程都是大致相同的,如果想了解具体内容,可以移步至我的这篇博客:高精度加法计算的实现

        在这里就不再详细讲解,只讲解主体过程qwq

主体过程

        高精度除法的原理和小学学习的竖式除法是一样的。

        高精度除法的实现

        概括来说,假如被除数长度为高精度除法的实现,除数长度为高精度除法的实现,为了减少冗余运算,我们从高精度除法的实现从后往前开始计算,将被除数与除数相对应的每一位相(整)除,实际上这一步可以看作一个逐次减法的过程,然后存进商的对应位置上,再将余数乘高精度除法的实现并放进下一位。

          高精度除法的实现用高精度计算,先除百位,将高精度除法的实现减去高精度除法的实现一次后变为高精度除法的实现,小于高精度除法的实现,所以将高精度除法的实现存入百位,将高精度除法的实现存入十位;

        再除十位,将高精度除法的实现减去高精度除法的实现三次后变为高精度除法的实现,小于高精度除法的实现,所以将高精度除法的实现存入十位,将高精度除法的实现存入个位;

        最后除个位,将高精度除法的实现减去高精度除法的实现八次后变为高精度除法的实现,小于高精度除法的实现,所以将高精度除法的实现存入个位,将高精度除法的实现存入余数数组。

        其实,高精度除法按理来说不需要反转存储,正序存储会更方便,但大部分题目,如果需要高精度除法去做,那么很有可能也需要其他的高精度计算,为了统一,我们还是使用反转存储。

        接下来,我们这里实现一个函数,它判断了被除数以下标高精度除法的实现为最低位,是否可以再减去除数而保持非负。这个函数分为三部分:

  1. 被除数剩余的部分比除数长,这个情况下最多多出 1 位,函数返回真。
  2. 如第一步判断为假,就说明被除数与除数一样长,那我们就从高位到低位,逐位比较:如果被除数当前位比除数当前位大,函数返回真;反之,函数返回假。
  3. 如第二步也判断为假,就说明被除数与除数相等,相等的情形下也是可行的,函数返回真。

        下面给出高精度除法的代码:

bool big(int a[],int b[],int low,int L){
	if(a[low+L]!=0) return 1;
	for(int i=L-1;i>=0;--i){
		if(a[low+i]>b[i]) 
			return 1;
		if(a[low+i]0;la--){
		if(a[la-1]!=0)
			break;
	}
	for(lb=L-1;lb>0;lb--){
		if(b[lb-1]!=0)
			break;
	}
	if(lb==0) return;
	for(int i=0;i=0;i--){
		while(big(d,b,i,lb)){
			for(int j=0;j=0;i--)
		cout
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]