レンプレート
int n = s1.length()-1;
int m = s2.length()-1;
int carry = 0; //キャリー
while (n >= 0 || m >= 0){ // 2 つの文字列の末尾から追加します
char c1 = n >= 0 ? s1.charAt(n--) : '0'; // 存在しない場合は '0' に置き換えます
char c2 = m >= 0 ? s2.charAt(m--) : '0';
int sum = (c1 - '0') + (c2 - '0') + キャリー;
res.append(合計 % 10);
キャリー = 合計 / 10;
}
if (carry == 1) res.append(carry); //最終キャリー
return res.reverse().toString(); // リバース後に文字列に変換します
一連の考え
1. 2 つの整数は文字列で表されます。たとえば、str1 = "12345"、str2 = "472" です。
2. i、j はそれぞれ str1 と str2 を最後から前方にスキャンします。
i と j が範囲外でない場合、c1 = str[i]、c2 = str[j];
i と j が範囲外の場合は、c1 または c2 に「0」を代入します。
前のキャリーはキャリー、現在の合計 sum = (c1 - '0') + (c2- '0') + キャリー
3、本位 = sum % 10,carry = sum / 10
例
(1)
問題の説明:
文字列 str で表される 2 つの整数を入力し、それらの数値の合計を求めます。
データ範囲: 1≤len(str)≤10000
説明を入力してください:
2 つの文字列を入力します。文字列に「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(); //反转后转成字符串
}
}