admin管理员组文章数量:1435859
这是一道今天遇到的面试题:50位的整数如何进行运算
经过我的思考,花费两个小时,中间推翻思路重写,最终写出来了下面的代码.思路是将两个整数以字符串的方式进行存储,之后将两个字符串转换成数组,然后通过一点代码逻辑进行相加.但是有趣的是,代码刚写完我就知道了BigInteger这个类.
经过测试解决了 9999+1 =00 以及 1111+9999=0000 的bug
public static String mathAdd(String strOne, String strTwo) {
// System.out.println("两数相加:" + (Long.parseLong(strOne) + Long.parseLong(strTwo)));
//求出比较长的字符串作为被加数 小的数作为加数
//求出两个字符串长度的差
int differ = strOne.length() - strTwo.length();
differ = Math.abs(differ);
String strMax = strOne.length() < strTwo.length() ? strTwo : strOne;
String strMin = strOne.length() < strTwo.length() ? strOne : strTwo;
//将两个字符串转换成数组
String[] strMaxs = strMax.split("");
String[] strMins = strMin.split("");
//然后开始for循环进行运算
//在这里是从个位是开始相加,倒着循环
int carry = 0;
for (int i = strMaxs.length - 1; i >= 0; i--) {
//将两个字符转成int
int numMax = Integer.parseInt(strMaxs[i]);
int numMin = 0;
//如果长度短的数组遍历完后,默认设置为0,
if (i - differ >= 0) {
numMin = Integer.parseInt(strMins[i - differ]);
}
int sum = numMax + numMin + carry;
carry = 0;
//如果大于9,向上一位进 1
if (sum > 9) {
carry = 1;
sum -= 10;
}
strMaxs[i] = sum +"";
//如果到最后一次循环,还要进一位 在数组第一个元素前面+1 比如 3 变成 13
if (i == 0 && carry == 1) {
strMaxs[0] = "1" + strMaxs[0];
}
}
//处理结果
String result = "";
for (String max : strMaxs) {
result += max;
}
System.out.println("处理结果:" + result);
return result;
}
版权声明:本文标题:进行整数运算时,如果长度超过long的长度该怎么办呢? 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1737972633a2043212.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论