面试中经常会碰到两个超大数相加
- 是整数;
- 两个数无限大,long都装不下;
- 不能用BigInteger;
- 不能用任何包装类提供的运算方法;
- 两个数都是以字符串的方式提供;
- 不能用任何包装类提供的运算方法;
思路:
1、首先把字符串转换成字符数组
2、两个字符数组分别从后往前逐个字符遍历
3、每次遍历将结果放在一个新建的数组中
4、将数组转成字符串并返回
public static void main(String[] args) {
String a = "913243455423234343546546563434";
String c = "913243455423234343546546563434";
String res = addBigString(a, c);
System.out.println(res);
}
public static String addBigString(String a, String b) {
char[] array1 = a.toCharArray();
char[] array2 = b.toCharArray();
char[] result = new char[Math.max(array1.length, array2.length) + 1];
int i = array1.length - 1;
int j = array2.length - 1;
int k = result.length - 1;
int sign = 0;
int tmp = 0;
int a1, a2;
while (i >= 0 || j >= 0) {
if (i >= 0)
a1 = array1[i--] - '0';
else
a1 = 0;
if (j >= 0)
a2 = array2[j--] - '0';
else
a2 = 0;
tmp = a1 + a2 + sign;
sign = tmp / 10;
result[k--] = (char) (tmp % 10 + '0');
}
if(sign>0)
result[k--] = '1';
return new String(result, k+1, result.length-k-1);
}