天天看点

编程题:给定两个字符串形式的非负整数 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');
           

继续阅读