1. 程式人生 > >【面試題】Java 2個(多個)大整數相加如何實現

【面試題】Java 2個(多個)大整數相加如何實現

之前面試阿里的時候,第四面的時候面試官讓我當他面實現這個題目,
一開始的時候問的時候 2個相加如何實現,然後我寫完了之後又問我如果是多個相加呢?面試官希望我能在實現的時候能夠考慮到各種可能性,比如多個數相加,然後等我寫完了之後,又問我有沒有更好的實現方法;以下是我的實現方法;

將待相加的數以字串的形式進行相加

簡單思路就是 多個字串的每一位進行相加,如果有進位 ,則讓進位也一起相加;
String a = “123456789”
String b = “123”
這種情況就要讓b變成
String b = “000000123” 與a的每一位進行相加


show the code

/**
 * Created by shirenchuang on 2018/6/28.
 */
public class BigDataAddUtils {
    public static String add(String... params){
        int maxLeng = 0;
        //獲取最大長度
        for(String s :params){
            if(s.length()>maxLeng)maxLeng=s.length();
        }

        StringBuffer result = new StringBuffer();
        //進位 數
int high= 0; //將每個待加引數每一位相加 進位 for (int i = 0 ;i<maxLeng;i++){ int charInt = 0; for(String s :params){ //高位不夠用0代替 charInt += s.length()-1<i?0: Integer.parseInt(s.charAt(s.length()-1-i)+""); } charInt+=high; //進位
high = charInt/10; //當前位的值 為charInt 餘數 int remainder = charInt%10; result.append(remainder); } //最後一次進位 if(high>0){ result.append(high); } //反轉 輸出結果 return result.reverse().toString(); } public static void main(String[] args) { System.out.print(add("10023888888888842340","9133333333319","1912")); } }

寫完之後,面試官問我還有沒有更好的解法;
emmmmm….暫時還沒有想到更好的解法,求告知!