java – 逐位减去两个整数
发布时间:2020-11-17 14:32:33 所属栏目:Java 来源:互联网
导读:最近我得到一个编程难题,我不能为我的生活找到一个令人满意的答案:计算由字符串给出的两个任意大的整数的总和,其中第二个整数可以是负数.这是在 Java中完成的,而不使用任何BigInteger,BigNumber等类. 我的初始方法是伪代码如下: 如果第二个字符串的第一个字
最近我得到一个编程难题,我不能为我的生活找到一个令人满意的答案:计算由字符串给出的两个任意大的整数的总和,其中第二个整数可以是负数.这是在 Java中完成的,而不使用任何BigInteger,BigNumber等类. 我的初始方法是伪代码如下: >如果第二个字符串的第一个字符为’ – ‘,则设置减法标志. 我的算法对于正数可以正常工作,但对负数给出非常不正确的结果.我已经尝试在纸上工作,但我似乎似乎无法理解如何逐位减法. 我目前的步骤4和5的算法如下: int[] result = new int[number1.length]; int carry = 0; for(int i = number1.length - 1; i >= 0; i--) { int newDigit = (negative ? number1[i] - number2[i] : number1[i] + number2[i]); newDigit += carry; if (newDigit >= 10) { carry = 1; newDigit -= 10; } else if (newDigit < 0) { carry = -1; newDigit += 10; } else { carry = 0; } result[i] = newDigit; } // Convert result back into a string. String resultString = intArrayToString(result); // Apply carry. if(carry == 1) { return "1" + resultString; } else if(carry == -1) { return "-" + resultString; } else { return resultString; } 解决方法如果符号为负数且number2大于number1,则可以简单地交换整数数组.你可以尝试这样的: boolean swap = false; for(int j = 0; j < number1.length && negative; j++){ if(number2[j] > number1[j]){ swap = true; int temp[] = number1; number1 = number2; number2 = temp; break; } else if(number1[j] > number2[j]){ break; } } int[] result = new int[number1.length]; int carry = 0; for(int i = number1.length - 1; i >= 0; i--) { int newDigit = (negative ? number1[i] - number2[i] : number1[i] + number2[i]); newDigit += carry; if (newDigit >= 10) { carry = 1; newDigit -= 10; } else if (newDigit < 0) { carry = -1; newDigit += 10; } else { carry = 0; } result[i] = newDigit; } // Convert result back into a string. String resultString = ""; for(int j = 0; j <result.length; j++){ resultString += (result[j] + ""); } // Apply carry. if(carry == 1) { return "1" + resultString; } else if(carry == -1 || swap) {//if swap is set sign is - return "-" + resultString; } else { return resultString; } (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Java:曾见过一个编译器或工具,在数组初始化器中重新输入最
- 详解Mybatis分页插件 - 示例代码
- java解析php函数json_encode unicode 编码问题
- JPA 2.1:Java 8 Date / Time API简介
- java – 为任何整数输入参数设置模拟返回值
- java-ee – 在maven-embedded-glassfish-plugin上的CDI注入
- Java 读写Properties配置文件详解
- Spring 报错:元素 context:component-scan 的前缀 context
- 完美解决单例设计模式中懒汉式线程安全的问题
- java web SpringMVC后端传json数据到前端页面实例代码