大整数减法计算思路与算法实现
来源:互联网 发布:java 微信发送消息 编辑:程序博客网 时间:2024/03/29 03:24
二、大整数减法
1、思路
大整数减法的思路,就是竖式减法a-b,有2种大情况:
- a大于b
- a小于b
第一种情况a>=b,就是逐项相减。如果够减就直接相减;如果本位不够减,寻找下一位借位
- 下一位>0,向下一位借位(
a[i+1]--
),加10到本位上再相减; - 下一位<0,循环查询下下一位(用while语句),找到大于0的那一位,向那一位借位(
a[i+k]--
),加10到本位上再相减,同时把本位下一位到借位位之间的数置为9。 - 如果循环到数组末尾仍然借不到位,那么就是被减数不够减,需要交换被减数和减数,同时计算-(b-a)
第二种情况a小于b,交换对象a和b(这里中间变量需用对象变量bigNum tmp
),然后算-(b-a)
2、 算法
运用数组存储两个操作数,先判断情况,再右对齐逐位相减
void operator- (bigNum & result,bigNum & b) { int length1=result.len,length2=b.len; bigNum tmp1,tmp2; tmp1=result; tmp2=b; /*保护现场*/ if(length1>=length2){ /*情况1:如果a>b或者a足够减b*/ /*注意还有区分虽然长度一样,但实际借不到位的情况,如2-3*/ for( int i = 0;i < MAX_LEN+10 ; i ++ ) { if(result.sInt[i] >= b.sInt[i]){/*如果够减*/ result.sInt[i] -= b.sInt[i]; //逐位相减 continue; } else{ /*不够减*/ if( result.sInt[i+1] > 0 ) //如果下一位够减 { //就借位 result.sInt[i] += 10; //借位 result.sInt[i] -= b.sInt[i]; //逐位相减 result.sInt[i+1]--; } else{ /*如果下一位不够减,试探下下位 */ int k=1; while(result.sInt[i+k] == 0) k++; if(i+k>= MAX_LEN+10){/*注意还有区分虽然长度一样,但实际借不到位的情况,如2-3*/ result=tmp2; /*情况3:a不足以减b,计算-(b-a)*/ b=tmp1; /*恢复现场*/ cannotSub=1; /*布尔变量,标记被减数小于减数*/ result-b; /*恢复现场时已经交换了位置*/ if(o=='-') /*除法也会调用减号函数,只有在减号下才打印负号*/ cout<<"-"; break; } if( result.sInt[i+k] > 0 ) //如果下下位够减 { //就借位 result.sInt[i] += 10; //借位 result.sInt[i] -= b.sInt[i]; //相减 result.sInt[i+k]--; for(int j=i+1;j<=k+i-1;j++){ result.sInt[j]=9; //并且中间的0全部变为9 } } } } } } if(length1<length2){ /*情况2:如果a<b,结果为-(b-a) */ bigNum tmp; /*简洁*/ tmp=result; result=b; b=tmp; result-b; if(o=='-') cout<<"-"; } result.len=0; for(int i=MAX_LEN+9;i>=0;i--){ if(result.sInt[i]!=0){ result.len=i+1; /*除法要用到长度,数组长度更新*/ break; } } }
0 0
- 大整数减法计算思路与算法实现
- 大整数加法计算思路与算法实现
- 贪心算法-大整数乘法/加法/减法
- 大整数减法的JavaScript实现
- 大整数减法
- 大整数减法
- 大整数减法
- 大整数减法
- 大整数加法减法
- 大整数减法
- 大整数减法模板
- 大整数减法
- 大整数减法
- 大整数的减法
- 大整数-减法
- 大整数减法
- 11:大整数减法
- 大整数减法
- java基础语法练习--输入年月日确定星期几
- localtime_r的实现
- ARM开发板移植lsusb命令
- Android 仿QQListView侧滑删除
- 大数运算——阶乘-40!
- 大整数减法计算思路与算法实现
- js得到url的各个部分
- Android 轻松实现仿淘宝地区选择
- Linux中文显示乱码?如何设置centos显示中文
- 用virtualBox安装centos设置网络和通信
- 如何在 Ubuntu 14.04 上通过 apt-get 安装 Apache Tomcat 7
- Android入门--android.graphics.Color 颜色设置
- Class类与JAVA反射
- 编译OpenWRT过程问题解决