一、题目
请设计一个算法完成两个超长正整数的加法。
二、思路
没有想到什么好的思路,就是让两个数进行相加,有进位就把进位也算上。当然也可以使用大数操作,参考BigInteger类就可以处理。核心API考察,如果API限制,可以考虑 采用字符串解析处理
三、代码
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
// 输入加数
String addend = scanner.next();
// 输入被加数
String augend = scanner.next();
// 输出结果
System.out.println(AddLongInteger(addend,augend));
}
}
/*
算法:完成两个超长正整数的加法
*/
public static String AddLongInteger(String addend, String augend) {
// 结果
StringBuilder res = new StringBuilder();
// 将加数和被加数进行反转
StringBuilder add = new StringBuilder(addend).reverse();
StringBuilder aug = new StringBuilder(augend).reverse();
// 求出长度
int addLength = add.length();
int augLength = aug.length();
int maxLen = Math.max(addLength, augLength);
// 用 0 补全字符串使得一样长
while (addLength <= maxLen) {
add.append('0');
addLength++;
}
while (augLength <= maxLen) {
aug.append('0');
augLength++;
}
// 进位
int carryBit = 0;
// 当前位
int current = 0;
for (int i = 0; i < maxLen; i++) {
int ad = add.charAt(i) - '0';
int au = aug.charAt(i) - '0';
int sum = ad + au + carryBit;
current = sum >= 10 ? sum - 10 : sum;
carryBit = sum / 10;
res.append(current);
}
// 如果遍历完了字符产,进位不为0,就说明最后还得再进一位
if (carryBit != 0) {
res.append(1);
}
return res.reverse().toString();
}
}
import java.math.BigInteger;
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
String addend = scanner.next();
String augend = scanner.next();
BigInteger num1 = new BigInteger(addend);
BigInteger num2 = new BigInteger(augend);
System.out.println(num1.add(num2));
}
}
}