字符串相加

lxf2023-05-21 01:50:13

前言:锻炼自己的思想,规范自己的编程思路。每天一道算法题,督促自己。

靡不有初,鲜克有终,加油坚持下去。

问题:给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

示例:

示例1:
输入:num1 = "11", num2 = "123"
输出:"134"

示例2:num1 = "0", num2 = "0"
输出:"0"

思路:首先看到这个题我想到了JavaScript的函数,将字符串转为数字(一身反骨,我转float类型),直接进行相加,然后将结果再转回数字就行,于是我得到以下代码,(哈哈哈哈,太短了吧)

/**
 * @param {string} num1
 * @param {string} num2
 * @return {string}
 */
var addStrings = function(num1, num2) {
    return (parseFloat(num1)+parseFloat(num2)).toString()
};

执行结果如下图:大数算不出来,emmm真愁人

字符串相加

这道题原来考察大数啊,应该要实现大数运算吧,诶,等等好像我计算机组成原理学过(手动狗头)。 那我就模拟一下数字相加,从后往前依次取出字符串的末尾转为数字,然后进行相加,如果不大于10,就直接相加保存下来;如果大于10,就向高位进一位,并保存本位,直至循环数组,最后将结果反转返回。基于上述模拟,代码如下:

var addStrings = function(num1, num2) {
    let i = num1.length - 1;
    let j = num2.length - 1;
    let carry = 0;
    let res = '';
    while (i >= 0 || j >= 0 || carry != 0) {
        let n1 = i >= 0 ? num1.charAt(i) - '0' : 0;
        let n2 = j >= 0 ? num2.charAt(j) - '0' : 0;
        let sum = n1 + n2 + carry;
        res += sum % 10;
        carry = Math.floor(sum / 10);
        i--;
        j--;
    }
    return res.split('').reverse().join('');
};

执行结果:

字符串相加

结论:这道题是简单题,但我看其实不算简单题,连计算机组成原理的加法实现都来了;但是又是简单题,小学的加法也是这么实现的,哈哈哈。

今天发现我五一写的“宅家”沸点被选中优质沸点啦,真开心。

本网站是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 本网站还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 除此之外,本网站还拥有一个活跃的社区,您可以在社区中与其他前端开发者交流技术、分享经验、解决问题。我们相信,社区的力量可以帮助您更好地成长和进步。 在本网站中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!