#96 高精度整数加法

レンプレート

        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(); //反转后转成字符串
    }
}

おすすめ

転載: blog.csdn.net/Seattle_night/article/details/130001965