Que07|791. 高精度加法

105 阅读1分钟
题目:791. 高精度加法 - AcWing题库
思路/想法:

位数是100000和大小是100000完全不同的概念...

image.png

输入字符串,将字符串进行倒序转化为数组,使得尾部对齐保证结果的正确性。将最后的结果使用List<Integer>进行承接。

代码实现:
// 简易版
import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s1 = sc.next();
        String s2 = sc.next();
        int[] arr1 = new int[s1.length()];
        int[] arr2 = new int[s2.length()];
        int j = 0;
        for (int i = s1.length() - 1; i >= 0; i--) arr1[j++] = s1.charAt(i) - '0';
        int k = 0;
        for (int i = s2.length() - 1; i >= 0; i--) arr2[k++] = s2.charAt(i) - '0';
        
        List<Integer> ans = new ArrayList<>();
        int t = 0;
        
        for (int i = 0; i < arr1.length || i < arr2.length; i++) {
            if (i < arr1.length) t += arr1[i];
            if (i < arr2.length) t += arr2[i];
            ans.add(t % 10);
            t /= 10;
        }
        if (t != 0) ans.add(1);
        
        for (int i = ans.size() - 1; i >= 0; i--) {
            System.out.print(ans.get(i));
        }
    } 
}


import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s1 = sc.nextLine();
        String s2 = sc.nextLine();
        int[] arr1 = new int[s1.length()];
        int[] arr2 = new int[s2.length()];
        int j = 0;
        for (int i = s1.length() - 1; i >= 0; i--) {
            arr1[j++] = s1.charAt(i) - '0'; 
        }
        j = 0;
        for (int i = s2.length() - 1; i >= 0; i--) {
            arr2[j++] = s2.charAt(i) - '0';
        }
        List<Integer> ans = add(arr1, arr2);
        for (int i = ans.size() - 1; i >= 0; i--) {
            System.out.print(ans.get(i));
        }
    }
    public static List<Integer> add(int[] arr1, int[] arr2) {
        List<Integer> ans = new ArrayList<>();
        int t = 0;
        for (int i = 0; i < arr1.length || i < arr2.length; i++) {
            if (i < arr2.length) t += arr2[i];
            if (i < arr1.length) t += arr1[i];
            ans.add(t % 10);
            t = t / 10;
        }
        if (t != 0) ans.add(1);
        return ans;
    }
}