Live2D

大数加法_Java

//容易忽视的点在于 加法进位时的条件时大于等于10 而不只是大于10

import java.util.ArrayList;
import java.util.LinkedList;

public class BigIntegerSum {

    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("123456");
        list.add("123456789");
        list.add("123456789123");
        System.out.println(new BigIntegerSum().sum(list));

    }

    public String sum(ArrayList<String> numbers) {
        // write code here
        String str = "0";
        for (String s : numbers) {
            str = addOfString(str, s);
        }
        return str;
    }

    public String addOfString(String s1, String s2) {
        //两个字符串相加
        char[] array1 = s1.toCharArray();
        char[] array2 = s2.toCharArray();
        LinkedList<String> list = new LinkedList<>();//保存结果的数组
        String str = "";
        if (array1.length > array2.length) {
            //将第二个数填充
            int lengthCha = array1.length - array2.length; //获得填充0的位数
            String lingStr = "";
            for (int i = 0; i < lengthCha; i++) {
                lingStr += "0";
            }
            s2 = lingStr + s2;//获得填充零后的s2
            char[] array2WithZero = s2.toCharArray();
            int jinwei = 0;
            for (int i = array2WithZero.length - 1; i >= 0; i--) {
                int a1 = charToInt(array1[i]); //获取数字
                int a2 = charToInt(array2WithZero[i]); //获取数字
                int ar = a1 + a2 + jinwei;
                int re = ar % 10;
                list.addFirst(re + "");//插到保存结果的链表的前部
                if (ar >= 10) {
                    jinwei = ar / 10;
                } else {
                    jinwei = 0;
                }
            }
            if (charToInt(array1[0]) + charToInt(array2WithZero[0]) > 10) {
                list.addFirst((charToInt(array1[0]) + charToInt(array2WithZero[0])) / 10 + "");
            }

            for (String s : list) {
                str += s;
            }
            return str;

        }
        if (array1.length < array2.length) {
            return addOfString(s2, s1);
        }
        if (array1.length == array2.length) {
            int jinwei = 0;
            for (int i = array2.length - 1; i >= 0; i--) {
                int a1 = charToInt(array1[i]); //获取数字
                int a2 = charToInt(array2[i]); //获取数字
                int ar = a1 + a2 + jinwei;
                int re = ar % 10;
                list.addFirst(re + "");//插到保存结果的链表的前部
                if (ar >= 10) {
                    jinwei = 1;
                } else {
                    jinwei = 0;
                }
            }
            if (charToInt(array1[0]) + charToInt(array2[0]) > 10) {
                list.addFirst("1");
            }
            for (String s : list) {
                str += s;
            }
            return str;
        }
        return str;
    }

    public static int charToInt(char c) {
        String str1 = String.valueOf(c); //先将字符转成字符串
        int a1 = Integer.parseInt(str1);//再将单个数字的字符串转成数字
        return a1;
    }
}
posted @ 2021-01-16 17:43  细雪之舞0213  阅读(92)  评论(0)    收藏  举报