兩個 大數求和
阿新 • • 發佈:2022-04-20
分析如下:
大數加法
用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(); } }
執行結果如下: