package com.zhjg.util;
public class LargeNumberPlus {
public static String plus(String p1, String p2) {
StringBuilder sb = new StringBuilder();
StringBuilder sb1 = new StringBuilder(p1);
StringBuilder sb2 = new StringBuilder(p2);
int dif = sb1.length() - sb2.length();
// 补齐长度
if (dif > 0) {
// 补齐p2
polish(sb2, dif);
} else if (dif < 0) {
// 补齐p1
polish(sb1, dif * (-1));
}
// 进位
boolean carry = false;
for (int i = sb1.length() - 1; i >= 0; i--) {
int num1 = Integer.parseInt(sb1.charAt(i) + "");
int num2 = Integer.parseInt(sb2.charAt(i) + "");
// 两位求和
int tmp = num1 + num2;
if (carry) {// 需要进位
tmp += 1;
}
// 与10作差的差值
int value = 0;
if (tmp >= 10) {
carry = true;
value = tmp - 10;
} else {
carry = false;
value = tmp;
}
sb.insert(0, value);
if (i == 0 && carry) {// 完成最高位的运算,并且需要进位
sb.insert(0, 1);
}
}
return sb.toString();
}
/**
* 较短字符串用“0”补齐
*
* @param sb
* @param length
*/
public static void polish(StringBuilder sb, int length) {
for (int i = 0; i < length; i++) {
sb.insert(0, "0");
}
}
}
高位数求和不使用BigDecimal
最新推荐文章于 2024-03-18 15:08:18 发布