Java实现两个大数相加

2018-09-30  本文已影响0人  从头再来123
package leetcode;

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        String a = "999";
        String b = "1";
        //将两个字符串分解成数组 分别为arr1和arr2
        int[] arr1 = new int[a.length()];
        int[] arr2 = new int[b.length()];
        for (int i = 0; i < a.length(); i++) {
            arr1[i] = Integer.parseInt(a.substring(i, i + 1));
        }
        for (int i = 0; i < b.length(); i++) {
            arr2[i] = Integer.parseInt(b.substring(i, i + 1));
        }
        System.out.println(Arrays.toString(arr1));
        System.out.println(Arrays.toString(arr2));
        //用carry记录进位值
        int carry = 0;
        int sum = 0;
        int i = arr1.length - 1;
        int j = arr2.length - 1;
        int[] store = new int[a.length() + 1];
        int count = 0;
        //将对应的位相加
        while (i >= 0 || j >= 0) {
            int num1 = i < 0 ? 0 : arr1[i];
            int num2 = j < 0 ? 0 : arr2[j];
            sum = carry + num1 + num2;
            carry = sum / 10;
            store[count++] = sum % 10;
            i--;
            j--;
        }
        //保存最后一次进位值
        store[count] = carry;
        System.out.println(Arrays.toString(store));
        //如果最后一次进位值为0则舍去
        int f = carry == 0 ? store.length - 2 : store.length - 1;
        StringBuffer sb = new StringBuffer();
        //将所得结果拼接
        for (int a1 = f; a1 >= 0; a1--) {
            sb.append(store[a1]);
        }
        System.out.println(sb);
    }
}
上一篇下一篇

猜你喜欢

热点阅读