这是一道今天遇到的面试题: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;
}
这是一道今天遇到的面试题: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;
}