加,再加上前一位的进位,再去判断是否本位是否有进位, 有则把本位数字改为减去它的权,也就是10,再置进位为1。如果没有进位,则给进位赋值0。
事实上,输入的两个大数均为字符串,对将第一个大数反转所得到的字符串命名为number1,第二个大数命名反转所得到的字符串为number2,对于第i位
int c=int (number1.[i] + number2.[i] - 96);
若c<10则表明该位相加没有进位,c>10则表明有进位。
若int carry=c/10,则对于加法运算结果反转所得字符串result的第i+1位满足(carry表示来自低位的进位):
int temp=number1.[i+1] + number2.[i+1]+carry - 96; result[i+1]=temp;
图2: 加法运算示意图
在实际编码中,为了提高效率,先将number1.[i] + number2.[i] - 48的值以字符的形式存在字符串容器result的第i个位置中,这样两个数相差较大时可以减少循环次数,最后再统一进行处理。
2.2 无符号减法运算的实现——MINUS方法
减法稍微有一点复杂, 因为会处理负数,而我们所用的是字符串的形式来保存数字也是为这一点。否则用整型或其它类型时,则表示处理、保存时会相当复杂。算法也是从低位开始减。先要判断减数和被减数那一个大,减数位大于被减数是正常减;被减数大,则被减数减减数,最后还要加上负号;处理每一项时要,如果前一位相减有借位,就先减去上一位的借位,无则不减,再去判断
4
是否能够减开被减数,如果减不开,就要借位后再去减,同时置借位为1,否则置借位为0。
下面是我实现比较数字字符串大小的方法: //返回1前者较大,返回0两者相等,返回-1后者较大
privateint COMPARE(String number1, String number2) { intj;
intlength1 = number1.length(); intlength2 = number2.length(); if (number1.length() == 0) number1 = \; if (number2.length() == 0)
number2 = \;
j = 0;
for (inti = 0; i break; } number1 = number1.substring(j); j = 0; for (inti = 0; i break; } number2 = number2.substring(j); length1 = number1.length(); length2 = number2.length(); if (length1>length2) { return 1; } elseif (length1 == length2) { if (number1.compareTo(number2) > 0) { return 1; } elseif (number1.compareTo(number2) == 0) { return 0; } else { return -1; } 5 } } else { } return -1; 思路是如果两个数长度不一样那么长度长的整数大;如果长度一致,由于0-9这10个数字的ASCII是逐渐递增的逐一只要取出每一位的字符来比较即可。 这样就可以判断减数和被减数哪个大,对于减数位大于被减数是正常减;被减数大,则被减数减减数,最后还要追加结果前面负号。 判断借位与加法判断进位原理差不多,就不一一说明了。 图3:减法实现示意图 2.3 有符号加减运算的实现——add方法和sub方法 UI类调用传参前会去除输入的数字中带有的’+’、’,’、空格等符号。add方法对两个数进行判断,如果两个数字均负(以‘-’开头),则转换为无符号大整数相加并在结果前面追加’-’;如果一正一负则转化为无符号大整数相减;如果均为正数,则进行无符号大整数相加。 sub方法思路同add方法。 代码如下: // 带符号大整数加法 public String add(String num1, String num2) { if (isNumeric(num1) && isNumeric(num2)) { String result=null; charc1 = num1.charAt(0); charc2 = num2.charAt(0); if (c1 == '-') { if (c2 == '-') { result=\+this.PLUS(num1.substring(1), num2.substring(1)); } else { 6 } } } result=this.MINUS(num2, num1.substring(1)); } else { if (c2 == '-') { } result=this.MINUS(num1, num2.substring(1)); result=this.PLUS(num1, num2); } else { returnresult; return\您的输入格式不正确\; } // 带符号大整数减法 public String sub(String num1, String num2) { } if (isNumeric(num1) && isNumeric(num2)) { } return\您的输入格式不正确\; String result=null; num1.replaceAll(\, \); num2.replaceAll(\, \); charc1 = num1.charAt(0); charc2 = num2.charAt(0); if (c1 == '-') { } returnresult; if (c2 == '-') { } if (c2 == '-') { } result=this.PLUS(num1, num2.substring(1)); result=this.MINUS(num1, num2); } else { result=this.MINUS(num2.substring(1), num1); result=\+this.PLUS(num1.substring(1), } else { num2.substring(1)); } else { 7 第三章运行结果效果图 1、程序初始界面 2、加法 图:加法示例1 8 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库大数加减运算(2)在线全文阅读。
相关推荐: