题解 | #大数加法#
大数加法
https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
public String solve (String s, String t) {
// write code here
//max 2147483647 10位
int index = 9;
if (s.length() < index && t.length() < index) {
return String.valueOf(Integer.parseInt(s) + Integer.parseInt(t));
}
String str = "";
ArrayList<Integer> a = new ArrayList<>();
ArrayList<Integer> b = new ArrayList<>();
ArrayList<Integer> ans = new ArrayList<>();
int small = 0;
int big = 0;
for (int i = s.length(); i > 0; i -= index) {
String temp_str = s.substring(i - index > 0 ? i - index : 0, i);
int temp = Integer.parseInt(temp_str);
a.add(temp);
}
System.out.println(a);
for (int i = t.length(); i > 0; i -= index) {
String temp_str = t.substring(i - index > 0 ? i - index : 0, i);
int temp = Integer.parseInt(temp_str);
b.add(temp);
}
System.out.println(b);
if (s.length() < t.length()) {
small = a.size();
big = b.size();
ans.addAll(b);
} else {
small = b.size();
big = a.size();
ans.addAll(a);
}
if (big != small) {
for (int i = small - 1; i >= 0; i--) {
int sum = a.get(i) + b.get(i);
if (sum > 999999999) {
ans.set(i, sum - 1000000000);
ans.set(i + 1, ans.get(i + 1) + 1);
} else {
ans.set(i, sum);
}
}
for (int i = small; i < big - 1; i++) {
int num = ans.get(i);
if (num > 999999999) {
ans.set(i, num - 1000000000);
ans.set(i + 1, ans.get(i + 1) + 1);
} else {
ans.set(i, num);
}
}
} else {
boolean isUp = false;
for (int i = 0; i < big; i++) {
int sum = a.get(i) + b.get(i);
if (isUp) {
sum++;
isUp = false;
}
if (sum > 999999999) {
ans.set(i, sum - 1000000000);
if (i == ans.size() - 1) {
ans.add(1);
} else {
isUp = true;
}
} else {
ans.set(i, sum);
}
}
}
int n_size = 0;
for (Integer i : ans) {
if (++n_size != ans.size()) {
int len = String.valueOf(i).length();
str = String.valueOf(i) + str;
while (len++ < index) {
str = "0" + str;
}
} else {
str = String.valueOf(i) + str;
}
}
return str;
}
}
查看20道真题和解析