一 题目
- Input:
- String a = "15324564...1455445"; //数字过长,不能转换为int/long型运算
- String b = "45645612...145"; //数字过长,不能转换为int/long型运算
- Output:
- 基本思路:
源码实现
import java.util.Scanner;
public class BigDecimalAdd {
public static String convertIntArrayToString(int[] intArray) {
StringBuffer stringBuffer = new StringBuffer();
boolean isNotStart = true; //从左至右, 只要一直遇到的是0,则为true
for (int i = 0; i < intArray.length; i++) {
if (isNotStart) {
if (intArray[i] != 0) {
isNotStart = false;
stringBuffer.append(intArray[i]);
}
} else {
stringBuffer.append(intArray[i]);
}
}
return stringBuffer.toString();
}
public static String plus(String a, String b) { //大数相加
char[] numbersA = a.toCharArray();
char[] numbersB = b.toCharArray();
int maxLength = numbersA.length > numbersA.length ? numbersA.length : numbersB.length;
int minLength = numbersA.length < numbersA.length ? numbersA.length : numbersB.length;
int[] result = new int[maxLength + 1];//默认 各位初始化值为0
int bitOperateResult; //保存位运算的结果
//开始运算: 两数对比各位进行运算
for (int i = 1; i <= minLength; i++) {
bitOperateResult = result[result.length - i] + Character.getNumericValue(numbersA[numbersA.length - i]) + Character.getNumericValue(numbersB[numbersB.length - i]);
// System.out.println(bitOperateResult);
result[result.length - i] = bitOperateResult % 10; //低位留余
result[result.length - i - 1] = result[result.length - i - 1] + bitOperateResult / 10; //高位进
}
return convertIntArrayToString(result);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String a = scanner.next();
String b = scanner.next();
System.out.println("a + b = " + plus(a, b));
}
}
560
123
a + b = 683