当前位置: 首页 > news >正文

沈阳教做网站网络建设公司不只是

沈阳教做网站,网络建设公司不只是,邢台网站优化定制,西瓜网站建设高精度除法与高精度加法的定义、前置过程都是大致相同的,如果想了解具体内容,可以移步至我的这篇博客:高精度加法计算的实现 在这里就不再详细讲解,只讲解主体过程qwq 主体过程 高精度除法的原理和小学学习的竖式除法是一样的。 …

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

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

主体过程

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

        

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

          12345\div 89用高精度计算,先除百位,将123减去89一次后变为34,小于89,所以将1存入百位,将34\times 10存入十位;

        再除十位,将34\times 10+4减去89三次后变为77,小于89,所以将3存入十位,将77\times 10存入个位;

        最后除个位,将77\times 10+5减去89八次后变为63,小于89,所以将8存入个位,将63存入余数数组。

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

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

  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]<b[i])return 0;}return 1;
}
void div(int a[],int b[],int c[],int d[]){clear(c);clear(d);int la,lb;for(la=L-1;la>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<la;i++) d[i]=a[i];for(int i=la-lb;i>=0;i--){while(big(d,b,i,lb)){for(int j=0;j<lb;j++){d[i+j]-=b[j];if(d[i+j]<0){d[i+j+1]-=1;d[i+j]+=10;}}c[i]++;}}
}

高精度计算器(总结)

        到这里,我们的高精度计算就全部完成了。

        下面给出高精度计算器的代码:

const int L=10000;
string s;
int a[L],b[L],c[L],d[L];
void clear(int a[]){for(int i=0;i<L;i++)a[i]=0;
}
void read(int a[]){cin>>s;int L=s.size();for(int i=0;i<L;i++)a[i]=s[L-1-i]-'0';
}
void print(int a[]){int i;for(i=L-1;i>=1;i--){if(a[i]!=0)break;}for(;i>=0;i--)cout<<a[i];cout<<endl;
}
void add(int a[],int b[],int c[]){clear(c);for(int i=0;i<L-1;++i){c[i]+=a[i]+b[i];if(c[i]>=10){c[i+1]+=1;c[i]-=10;}}
}
void sub(int a[],int b[],int c[]){clear(c);for(int i=0;i<L-1;++i){c[i]+=a[i]-b[i];if(c[i]<0){c[i+1]-=1;c[i]+=10;}}
}
void mul(int a[],int b[],int c[]){clear(c);for(int i=0;i<L-1;i++){for(int j=0;j<=i;j++)c[i]+=a[j]*b[i-j];if(c[i]>=10){c[i+1]+=c[i]/10;c[i]%=10;}}
}
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]<b[i])return 0;}return 1;
}
void div(int a[],int b[],int c[],int d[]){clear(c);clear(d);int la,lb;for(la=L-1;la>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<la;i++) d[i]=a[i];for(int i=la-lb;i>=0;i--){while(big(d,b,i,lb)){for(int j=0;j<lb;j++){d[i+j]-=b[j];if(d[i+j]<0){d[i+j+1]-=1;d[i+j]+=10;}}c[i]++;}}
}

每周六更新一篇文章,内容一般是自己总结的经验或是在其他网站上整理的优质内容

点个赞,关注一下呗~

http://www.yayakq.cn/news/981533/

相关文章:

  • 华茂达建设集团网站建筑业资质查询网站
  • 网站建设与网页设计的论文网站要怎么备案
  • 怎样提交网站地图企业简介优势项目案例等推广
  • 网站设置了权限php网站后台忘记密码
  • 出口电商网站建设程序旧域名新网站
  • 外贸网站搭建施工企业资质类别
  • 运城可以做网站的公司对外宣传推广方案
  • 马克斯网站建设站长统计代码
  • 网站建设 数据库管理深圳网站建设高端设计
  • 做网站找哪家好熊掌号做网站营销
  • 网站建设方案大全搭建网站多少时间
  • 黄山市网站建设网站怎么做收费
  • 公司网站建设内容微信管理系统软件
  • 国家重点项目建设库网站制作公司宣传册
  • 电商网站 制作做网站业务
  • 杯子网站开发方案模板企业为什么要并购
  • 好医生网站怎么做不了题目了支付宝小程序代理
  • 怎么做直播室的网站湖北公司网站备案严格吗
  • 网站建设 计划书天津省网站制作厂家
  • 做兼职的网站有哪些如何用自己网站做大电商
  • 上海华东建设发展设计有限公司网站wordpress做一个查找数据库
  • 多语言网站实现硬件定制
  • wordpress杂志主题深圳排名seo公司
  • 长春建设银行网站微信开放平台个人申请
  • 网站建设这块是怎么挣钱python编程软件手机版
  • 搜索网站有哪些网站能用到管理后台上吗
  • 建一个网站需要多少钱株洲外贸网站建设
  • 德州专业网站制作哪家好seo品牌优化百度资源网站推广关键词排名
  • 汽车租赁企业网站源码网站开发工程师岗位职责要求
  • vs做网站标签输出语言第二个深圳建设在哪里