package com.thread.charpter.one;
import java.math.BigDecimal;
/**
-
大数求和 关注2个问题 1.new StringBuilder(add1).reverse() 2.BigDecimal 大小范围
-
@ClassName: TestAdd
-
@date: 2019年4月2日 下午6:01:02
-
@company:你我贷
-
@author shenlu
/
public class TestAdd {
/*- 方法1
- @date: 2019年4月2日 下午5:54:23
- @author shenlu
- @param add1
- @param add2
- @return
*/
public String addBig(String add1, String add2) {
BigDecimal bg1 = new BigDecimal(add1);
BigDecimal bg2 = new BigDecimal(add2);
return bg1.add(bg2).toString();
}
/**
-
方法二
-
@date: 2019年4月2日 下午5:54:43 1.反转两个字符串,便于从低位到高位相加和最高位的进位导致和的位数增加;
2.对齐两个字符串,即短字符串的高位用‘0’补齐,便于后面的相加; 3.把两个正整数相加,一位一位的加并加上进位。 -
@author shenlu
-
@param add1
-
@param add2
-
@return
*/
public String add(String add1, String add2) {StringBuffer result = new StringBuffer();
add1 = new StringBuilder(add1).reverse().toString();
add2 = new StringBuilder(add2).reverse().toString();int len1 = add1.length();
int len2 = add2.length();int maxlen = len1 > len2 ? len1 : len2;
if (len1 < len2) {
for (int i = len1; i < len2; i++) {
add1 += ‘0’;
}
} else if (len1 > len2) {
for (int i = len2; i < len1; i++) {
add2 += ‘0’;
}
}boolean nOverFlow = false; // 是否越界
int nTakeOver = 0; // 溢出数量for (int i = 0; i < maxlen; i++) {
int nSum = Integer.parseInt(add1.charAt(i) + “”)
+ Integer.parseInt(add2.charAt(i) + “”) + nTakeOver;
if (nSum >= 10) {
if (i == (maxlen - 1)) {
nOverFlow = true;
}
result.append(nSum - 10);
nTakeOver = 1;
} else {
result.append(nSum);
nTakeOver = 0;
}
}if (nOverFlow) {
result.append(nTakeOver);
}
return result.reverse().toString();
}
public static void main(String[] args) {
TestAdd test = new TestAdd();
System.out
.println(test
.add(“99999999990000000990”,
“111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111155555552”));
System.out
.println(test
.addBig(“99999999990000000990”,
“111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111155555552”));
}
}