模板
int n = s1.length()-1;
int m = s2.length()-1;
int carry = 0; //进位
while (n >= 0 || m >= 0){ //从两个字符串的末尾开始相加
char c1 = n >= 0 ? s1.charAt(n--) : '0'; //没有了就用‘0’代替
char c2 = m >= 0 ? s2.charAt(m--) : '0';
int sum = (c1 - '0') + (c2 - '0') + carry;
res.append(sum % 10);
carry = sum / 10;
}
if (carry == 1) res.append(carry); //最后的进位
return res.reverse().toString(); //反转后转成字符串
思路
1、两个整数用字符串表示,例如str1 = “12345”,str2 = “472”
2、i、j分别从末尾向前扫描str1和str2,
若 i、j未越界,c1 = str[i],c2 = str[j];
若i、j越界,用'0'赋值给c1或c2。
上一位进位为carry,本位和 sum = (c1 - '0') + ( c2- '0') + carry
3、本位 = sum % 10,carry = sum / 10
例题
(1)
问题描述:
输入两个用字符串 str 表示的整数,求它们所表示的数之和。
数据范围: 1≤len(str)≤10000
输入描述:
输入两个字符串。保证字符串只含有'0'~'9'字符
输出描述:
输出求和后的结果
示例1
输入:
9876543210 1234567890
复制输出:
11111111100
题解
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
while (scan.hasNext()){
String s1 = scan.next(); //读入字符串
String s2 = scan.next();
scan.close();
String res = add(s1, s2);
System.out.println(res);
}
}
public static String add(String s1, String s2){
StringBuilder res = new StringBuilder();
int n = s1.length()-1;
int m = s2.length()-1;
int carry = 0; //进位
while (n >= 0 || m >= 0){ //从两个字符串的末尾开始相加
char c1 = n >= 0 ? s1.charAt(n--) : '0'; //没有了就用‘0’代替
char c2 = m >= 0 ? s2.charAt(m--) : '0';
int sum = (c1 - '0') + (c2 - '0') + carry;
res.append(sum % 10);
carry = sum / 10;
}
if (carry == 1) res.append(carry); //最后的进位
return res.reverse().toString(); //反转后转成字符串
}
}