国外做婚纱摄影店设计的网站,wordpress如何添加二级菜单,烟台百度网站建设推广,wordpress 404 not found高精度除法与高精度加法的定义、前置过程都是大致相同的#xff0c;如果想了解具体内容#xff0c;可以移步至我的这篇博客#xff1a;高精度加法计算的实现 在这里就不再详细讲解#xff0c;只讲解主体过程qwq
主体过程 高精度除法的原理和小学学习的竖式除法是一样的。 … 高精度除法与高精度加法的定义、前置过程都是大致相同的如果想了解具体内容可以移步至我的这篇博客高精度加法计算的实现 在这里就不再详细讲解只讲解主体过程qwq
主体过程 高精度除法的原理和小学学习的竖式除法是一样的。 概括来说假如被除数长度为除数长度为为了减少冗余运算我们从从后往前开始计算将被除数与除数相对应的每一位相整除实际上这一步可以看作一个逐次减法的过程然后存进商的对应位置上再将余数乘并放进下一位。 用高精度计算先除百位将减去一次后变为小于所以将存入百位将存入十位 再除十位将减去三次后变为小于所以将存入十位将存入个位 最后除个位将减去八次后变为小于所以将存入个位将存入余数数组。 其实高精度除法按理来说不需要反转存储正序存储会更方便但大部分题目如果需要高精度除法去做那么很有可能也需要其他的高精度计算为了统一我们还是使用反转存储。 接下来我们这里实现一个函数它判断了被除数以下标为最低位是否可以再减去除数而保持非负。这个函数分为三部分
被除数剩余的部分比除数长这个情况下最多多出 1 位函数返回真。如第一步判断为假就说明被除数与除数一样长那我们就从高位到低位逐位比较如果被除数当前位比除数当前位大函数返回真反之函数返回假。如第二步也判断为假就说明被除数与除数相等相等的情形下也是可行的函数返回真。 下面给出高精度除法的代码
bool big(int a[],int b[],int low,int L){if(a[lowL]!0) return 1;for(int iL-1;i0;--i){if(a[lowi]b[i]) return 1;if(a[lowi]b[i])return 0;}return 1;
}
void div(int a[],int b[],int c[],int d[]){clear(c);clear(d);int la,lb;for(laL-1;la0;la--){if(a[la-1]!0)break;}for(lbL-1;lb0;lb--){if(b[lb-1]!0)break;}if(lb0) return;for(int i0;ila;i) d[i]a[i];for(int ila-lb;i0;i--){while(big(d,b,i,lb)){for(int j0;jlb;j){d[ij]-b[j];if(d[ij]0){d[ij1]-1;d[ij]10;}}c[i];}}
}
高精度计算器总结 到这里我们的高精度计算就全部完成了。 下面给出高精度计算器的代码
const int L10000;
string s;
int a[L],b[L],c[L],d[L];
void clear(int a[]){for(int i0;iL;i)a[i]0;
}
void read(int a[]){cins;int Ls.size();for(int i0;iL;i)a[i]s[L-1-i]-0;
}
void print(int a[]){int i;for(iL-1;i1;i--){if(a[i]!0)break;}for(;i0;i--)couta[i];coutendl;
}
void add(int a[],int b[],int c[]){clear(c);for(int i0;iL-1;i){c[i]a[i]b[i];if(c[i]10){c[i1]1;c[i]-10;}}
}
void sub(int a[],int b[],int c[]){clear(c);for(int i0;iL-1;i){c[i]a[i]-b[i];if(c[i]0){c[i1]-1;c[i]10;}}
}
void mul(int a[],int b[],int c[]){clear(c);for(int i0;iL-1;i){for(int j0;ji;j)c[i]a[j]*b[i-j];if(c[i]10){c[i1]c[i]/10;c[i]%10;}}
}
bool big(int a[],int b[],int low,int L){if(a[lowL]!0) return 1;for(int iL-1;i0;--i){if(a[lowi]b[i]) return 1;if(a[lowi]b[i])return 0;}return 1;
}
void div(int a[],int b[],int c[],int d[]){clear(c);clear(d);int la,lb;for(laL-1;la0;la--){if(a[la-1]!0)break;}for(lbL-1;lb0;lb--){if(b[lb-1]!0)break;}if(lb0) return;for(int i0;ila;i) d[i]a[i];for(int ila-lb;i0;i--){while(big(d,b,i,lb)){for(int j0;jlb;j){d[ij]-b[j];if(d[ij]0){d[ij1]-1;d[ij]10;}}c[i];}}
}
每周六更新一篇文章内容一般是自己总结的经验或是在其他网站上整理的优质内容
点个赞关注一下呗~