#96 高精度整数加法

模板

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

猜你喜欢

转载自blog.csdn.net/Seattle_night/article/details/130001965
96