編程題:給定兩個字符串形式的非負整數 num1 和num2 ,計算它們的和,並以字符串輸出

給定兩個字符串形式的非負整數 num1 和num2 ,計算它們的和,並以字符串輸出。

要求:

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

例如:

  1. 輸入:‘123,12’
  2. 返回:‘135’

思路:

  1. 把字符串以“,”分成數組;
  2. 將2個數值,再分爲數組;
  3. 將兩個數組倒置;
  4. 按順序一一做和,超過10,下一位加1;
  5. 將brr[0]==0,的數值去掉;
  6. 將brr轉爲字符串;

運行結果:

  1. 輸入:‘123,12’;
  2. 以‘,’轉爲數組:【123,12】;
  3. 分別轉爲數組:【1,2,3】,【1,2】;
  4. 分別倒置:【3,2,1】,【2,1】;
  5. 按順序作和:【5,3,1】;
  6. 倒置:【1,3,5】;
  7. 轉爲字符串:‘135’
function solution(num1) {
    var arr = num1.split(',');
    var a1 = arr[0].split('').reverse();
    var a2 = arr[1].split('').reverse();
    if (a1.length >= a2.length) {
        var brr = [];
        brr[0] = 0;
        for (var i = 0; i <= a1.length - 1; i++) {
            if(a2[i]==null){
                a2[i]=0;
            }
            brr[i] = brr[i] + Number(a1[i]) + Number(a2[i]);
            if (brr[i] >= 10) {
                brr[i + 1] = 1;
            } else {
                brr[i + 1] = 0
            }
        }
    }else{
        var brr = [];
        brr[0] = 0;
        for (var i = 0; i <= a2.length - 1; i++) {
            if(a1[i]==null){
                a1[i]=0;
            }
            brr[i] = brr[i] + Number(a1[i]) + Number(a2[i]);
            if (brr[i] >= 10) {
                brr[i + 1] = 1;
            } else {
                if(i+1 <= a2.length - 1){
                    brr[i + 1] = 0
                }
            }
        }
    }
    brr=brr.reverse()
    if (brr[0] == 0) {
        brr.shift(0);
    }
    var smg = '';
    for (let i = 0; i < brr.length; i++) {
        smg = smg + brr[i]
    }
    return smg;
}
solution('12,34');
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章