nowcoder NC1 大数加法 |刷题打卡

215 阅读1分钟

nowcoder NC1 大数加法|刷题打卡

本文正在参与掘金团队号上线活动,点击 查看大厂春招职位

一、题目描述

NC1 大数加法

以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。 (字符串长度不大于100000,保证字符串仅由'0'~'9'这10种字符组成)

输入

"1","99"

输出

"100"

二、思路分析:

  1. 将字符串分割成字符数组。
  2. 将字符数组右边对齐。
  3. 利用数组对每位数字进行加运算,注意保存进位。

三、AC 代码:

function solve( s ,  t ) {
    // write code here
    let a1 = s.split("")
    let a2 = t.split("")
    let a1len = a1.length
    let a2len = a2.length
    let uplen
    let up = []
    let count = []

    if (a1len >= a2len) {
        uplen = a1len
        for (let i = 0; i < a1len - a2len; i++) {
            a2 = [0].concat(a2);
        }
    } else {
        uplen = a2len
        for (let i = 0; i < a2len - a1len; i++) {
            a1 = [0].concat(a1);
        }
    }

    up.length = uplen + 1
    up.fill(0);

    for (let i = uplen - 1; i >= 0; i--) {
        count[i] = ((a1[i] - 0) + (a2[i] - 0) + (up[i + 1] - 0)) % 10;
        (a1[i] - 0) + (a2[i] - 0) + (up[i + 1] - 0)>= 10 ? up[i] = 1 : up[i] = 0
        if(i==0 && up[0] == 1){
            count = [1].concat(count)
        }
    }
    return count.join("")
}

四、总结:

对于大数加法,如果只用数值类型进行运算,可能会超出数值类型可以表示的范围。 所以考虑用数组来进行每一位数字的运算,也就是模拟笔算加法的过程。