两个超长字符串相加

思路:将他们转成int数组,然后按位相加,空间复杂度有点高,但时间复杂度为Max(O(M,N))

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String one = scanner.next();
            String two = scanner.next();
           addBigDight(one,two);
        }
    }

    private static void addBigDight(String one,String two){
        int oneLen = one.length();
        int twoLen = two.length();
        int resultLen = (oneLen > twoLen ? oneLen : twoLen ) + 1;
        int[] result = new int[resultLen];
        int oneIndex = oneLen - 1;
        int twoIndex = twoLen - 1;
        int index = 0;
        char[] oneChars = one.toCharArray();
        char[] twoChars = two.toCharArray();

        int[] oneArr = new int[oneLen];
        int[] twoArr = new int[twoLen];

        for (int i = 0; i < oneArr.length; i++) {
            oneArr[i] = oneChars[i] - '0';
        }
        for (int i = 0; i < twoChars.length; i++) {
            twoArr[i] = twoChars[i] - '0';
        }
        while (oneIndex >= 0 && twoIndex >= 0){
            result[index] += oneArr[oneIndex] + twoArr[twoIndex];
            if(result[index] > 9){
                result[index] -= 10;
                result[index + 1] = 1;
            }
            index++;
            oneIndex--;
            twoIndex--;
        }
        while (oneIndex >= 0){
            result[index] += oneArr[oneIndex];
            index++;
            oneIndex--;
        }
        while (twoIndex >= 0){
            result[index] += twoArr[twoIndex];
            index++;
            twoIndex--;
        }
        for (int i = index-1; i >= 0 ; i--) {
            System.out.print(result[i]);
        }
         System.out.println();
    }

}
原文地址:https://www.cnblogs.com/dongma/p/13258300.html