对于大到会溢出任何数据类型的整数进行求和:
思路:将数字一字符串的形式保存;逐位进行求和;
细节:注意进位;
public class BigIntegerTest {
public static int[] add(String a, String b) {
String[] strs = prepare(a, b);
a = strs[0];
b = strs[1];
System.out.println("\t" + a);
System.out.println("+\t" + b);
System.out.println("------------------------");
int n = a.length();
int[] res = new int[n + 1];//可能产生进位
int num1 = 0, num2 = 0, num = 0;
//从最低位开始逐位相加
for (int i = n - 1; i >= 0; i--) {
num1 = Integer.parseInt(a.substring(i, i + 1));
num2 = Integer.parseInt(b.substring(i, i + 1));
//该位数值的和,可能会产生进位; 该和有两部分组成
num = num1 + num2;//部分一,本位数字求和
num += res[i + 1];//部分二,本位数字求和在加上进位值。
res[i + 1] = (num % 10);//本位
res[i] = num / 10;//上一位
}
return res;
}
//对数字字符串做格式处理,不足位用0补齐
public static String[] prepare(String a, String b) {
String[] strs = new String[2];
for (int i = 0; i < 2; i++) {
strs[i] = "";
}
if (a.length() > b.length())
b = doFormat(b, a.length(), 0);
else if (a.length() < b.length())
a = doFormat(a, b.length(), 0);
strs[0] = a;
strs[1] = b;
return strs;
}
public static String doFormat(String str, int n, int partten) {
String newStr = "";
for (int i = 0; i < n - str.length(); i++) {
newStr += "0";
}
return newStr + str;
}
public static void main(String[] args) {
String strA = "123456789";
String strB = "12345678910111213";
int[] result = add(strA, strB);
System.out.print("\t");
for (int i = 0; i < result.length; i++) {
if (result[i] == 0 && i == 0)
continue;
System.out.print(result[i]);
}
}
}
00000000123456789
+ 12345678910111213
------------------------
12345679033568002