1. 程式人生 > 其它 >兩個 大數求和

兩個 大數求和

分析如下:

大數加法
用BigInteger是投機取巧的做法,面試時這麼幹會被面試官噴。這題考察的是大數計算器的思想,類似的題還有lc 2(連結串列兩數相加)。只需要想象一下我們在做加法時,都做了什麼事情,其實只有兩種情況:需要進位和不需要進位。所謂進位,無非是當前位相加大於等於10的話,就在下一位加1。那麼我們就可以用一個變數carry來表示是否有進位,有進位為1,無進位為0,於是在每一位計算時,所做的計算就是三個變數相加:

結果的此位 = 第一個數的此位 + 第二個數的此位 + carry;

//程式碼如下:

import java.util.*;

class Main{
    public static void main(String[] args) {
        Solution solution=new Solution();
        System.out.println(solution.solve("4000","321"));
    }
}
public class Solution {
    /**
     * 計算兩個數之和
     * @param s string字串 表示第一個整數
     * @param t string字串 表示第二個整數
     */
    public String solve (String s, String t) {
        String longer=s,shorter=t;
        if(s.length()<t.length()){
            longer=t;
            shorter=s;
        }
        StringBuilder res=new StringBuilder();
        int i,j;
        int carry=0;
        for(i=shorter.length()-1,j=longer.length()-1;i>=0;i--,j--){
            int a=shorter.charAt(i)-'0';
            int b=longer.charAt(j)-'0';
            int cur=a+b+carry;
            if(cur>=10){
                cur%=10;
                carry=1;
            }else{
                carry=0;
            }
            res.insert(0,cur);
        }
        for(int x=j;j>=0;j--){
            int b=longer.charAt(j)-'0';
            int cur=b+carry;
            if(cur>=10){
                cur%=10;
                carry=1;
            }else{
                carry=0;
            }
            res.insert(0,cur);
        }
        if(carry!=0){
            res.insert(0,carry);
        }
        return res.toString();
    }
}

執行結果如下: