1. 程式人生 > >隨筆-給定兩個字串形式的非負整數 num1 和num2 ,計算它們的和

隨筆-給定兩個字串形式的非負整數 num1 和num2 ,計算它們的和

題目:給定兩個字串形式的非負整數 num1 和num2 ,計算它們的和。

注意:

num1 和num2 的長度都小於 5100.
num1 和num2 都只包含數字 0-9.
num1 和num2 都不包含任何前導零。
你不能使用任何內建 BigInteger 庫, 也不能直接將輸入的字串轉換為整數形式。

思路:從兩個字串最後一位開始相加,如果結果大於9,進位。 當有一個加完後,呼叫substring方法將剩餘的字串給拼接過去;

class Solution {
    public String addStrings(String num1, String num2) {
        if(num1==null || num2==null || num1.length()==0 || num2.length()==0 ){
            return "";
        }
        int len1=num1.length()-1;
        int len2=num2.length()-1;
        int result=0;
        String s="";
        int sum;
        while(len1>=0||len2>=0){
            if(len1<0&&len2>=0){  //num2 沒加完
                 sum=num2.charAt(len2)+result-'0'; 
                if(result!=0){
                    if(sum>9){
                    result=1;
                    s=String.valueOf(sum%10)+s;
                    }else{
                    s=String.valueOf(sum%10)+s;
                      result=0;   
                    }
                }else{
                    s=num2.substring(0,len2+1)+s;
                    result=0;
                    break;
                }
            }
             if(len1>=0&&len2<0){
                 sum=num1.charAt(len1)+result-'0'; 
                if(result!=0){
                    if(sum>9){
                    result=1;
                    s=String.valueOf(sum%10)+s;
                    }else{
                    s=String.valueOf(sum%10)+s;
                      result=0;   
                    }
                }else{
                    s=num1.substring(0,len1+1)+s;
                    result=0;
                    break;
                }
            }
            if(len1>=0&&len2>=0){
                sum=num1.charAt(len1)+num2.charAt(len2)+result-2*'0';
                if(sum>9){
                    result=1;
                    s=String.valueOf(sum%10)+s;
                }else{
                    s=String.valueOf(sum)+s;
                    result=0;
                }
            }
            len1--;
            len2--;
        }
        if(result!=0){
            s=Integer.toString(result)+s;
        }
        return s;
    }
}