最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
java中实现超大整数相加减
时间:2012-02-16 编辑:简简单单 来源:一聚教程网
代码如下 | 复制代码 |
/** * 整数加法 * * @param lv * 左值 * @param rv * 右值 * @param result * 相加的结果 * @数值存放说明 数值的每一位作为栈的一项存放在栈中,从栈底到栈顶依次是数值的高位到低位 * @算法描述 输入的加数倒序存放在栈中(即栈顶是数的最低位,栈底是数的最高位)。 计算的时候,依次弹出栈中的数据,对每一位执行加操作。 * 若遇到进位,则将进位标志carry设置为1,以在进行下一位计算的时候将其加上。 进位加结束后,将carry的值重置为0。 * 每次计算都会检查进位标志carry的值 */ void plus(Stack int sum = 0; // 进位标志 int carry = 0; while (true) { try { // 两个加数的长度都还不为0,继续分别在两个栈中取出一位相加 if (!lv.empty() && !rv.empty()) { // 两个加数取出一位值相加,再加上进位(因为在有进位时carry=1,无进位时carry=0,根据任何数与0相加都等于0,所以可以直接加上) sum = lv.pop() + rv.pop() + carry; // 进位标志使用后,重置为0 carry = 0; // 根据当前加数的和再加上进位的结果是否大于9(即10甚至更大,因为每一位加数的最大值只可能是9,所以这里最大也只能是18) // 进行是否进位的判断依据,若大于9,将当前位相加的结果减去10,并将进位标志设置为1 if (sum > 9) { sum -= 10; carry = 1; } result.push(sum); // 在两个加数的每一位都进行了计算后,判断是否还有进位,若有则加到结果的最高位 // 为了在两个加数位数(长度)不相等时能正确地计算,这个条件必需放在下面的两个条件前面 } else if (lv.empty() && rv.empty()) { if (carry == 1) result.push(carry); return; // 左值已经为空(每一位都参与了计算),而右值还不为空时,将右值的每一位取出加上进位值放到结果中 } else if (lv.empty()) { sum = rv.pop() + carry; carry = 0; if (sum > 9) { sum -= 10; carry = 1; } result.push(sum); // 同上面左值说明 } else if (rv.empty()) { sum = lv.pop() + carry; carry = 0; if (sum > 9) { sum -= 10; carry = 1; } result.push(sum); } } catch (Exception e) { System.err.println("栈溢出"); } } } |
-
上一个: JSON字符串转换object错误:MorphDynaBean cannot be cast to com.softright.bean.TestBean
-
下一个: java支持断点续传文件上传和下载组件
相关文章
- SpringBoot测试配置属性与web启动环境解析 10-24
- vue中将el-switch值true、false改为number类型的1和0解析 10-24
- Vue中的路由配置项meta使用解读 10-24
- SpringBoot自定义bean绑定解析 10-24
- SpringBoot常用计量与bean属性校验和进制数据转换规则解析 10-24
- 工厂方法在Spring框架中的运用介绍 10-24