题解
举例: s1=1234567、s2=789
1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 7 | 8 | 9 |
1.将短串s2左侧添加0。
2.for循环从右到左(低位到高位)相加。
3.输出相加的结果。
知识点:字符串相加 需要转为10进制进行相加,也就是char1 - '0' = 实际十进制数。
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String s1 = sc.next();
String s2 = sc.next();
// 确保s1 的长度最长
if (s2.length() > s1.length()) {
String temp = s1;
s1 = s2;
s2 = temp;
}
// 将s2左边用0来填充,长度为最长s1的长度
// 1123456
// 0000123
s2 = s1.replaceAll("[0-9]", "0").substring(0, s1.length() - s2.length()) + s2;
int move = 0; // 表示进位 加法 最大进1 所以 move 的取值 0,1
StringBuilder sb = new StringBuilder();
for (int i = s1.length() - 1; i >= 0; i--) {
char c1 = s1.charAt(i);
char c2 = s2.charAt(i);
int sum = (int)(c1 - '0' + c2 - '0') + move;
char ch = '0'; // 当前位置的字符
if (sum >= 10) {
move = 1; // 大于10,进一
ch = (char)(sum % 10 + '0'); // 取各位作为当前值
} else {
move = 0;
ch = (char)(sum + '0'); // 取当前和作为当前值
}
if (i == 0 && sum > 10) {
sb.append(ch).append('1'); // 进1位
} else {
sb.append(ch);
}
}
System.out.println(sb.reverse());
}
}
}