【面試題】Java 2個(多個)大整數相加如何實現
阿新 • • 發佈:2018-11-19
之前面試阿里的時候,第四面的時候面試官讓我當他面實現這個題目,
一開始的時候問的時候 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….暫時還沒有想到更好的解法,求告知!