- 问题集**-给定两个表示为字符串的非负整数num1和num2,返回num1和num2的乘积(也表示为字符串)。
我的算法似乎工作正常,除了一个测试用例回文从1 - 9
- 更新**
javascript有一个parse方法,但我不想用它,因为问题来自leetcode,或者事实上来自任何这样的网站,习题集明确地说了这一点。
//**Input:**
var n1 = "123456789"
var n2 = "987654321"
var multiply = function(str1, str2) {
var sum = 0, k = 1;
for( var i = str1.length - 1; i>=0; i--){
var val1 = parseInt(str1[i], 10) * k;
k *= 10;
var d = 1;
for(var j = str2.length - 1; j >=0; j--){
var val2 = parseInt(str2[j], 10) * d;
d *= 10;
sum += val1 * val2;
}
}
return sum.toString();
};
console.log(multiply(n1,n2))
我不明白出了什么问题。其他回文还可以。
2条答案
按热度按时间pcww981p1#
这样做的目的可能是实现自己的大数乘法算法,当整数(本例中的乘积)需要超过15-16位数时,JavaScript数字类型无法以足够的精度存储,因此如果只对输入使用乘法运算符,结果将是错误的。
即使你在一个数字变量中对较小的乘积求和,这个和最终也会超过
Number.MAX_SAFE_INTEGER
的限制,你需要将较小的计算结果存储在另一个数据结构中,比如数组或字符串。下面是长乘法算法的一个简单实现:
从ECMAScript 2020开始,JavaScript就有了bigint数据类型,使用它可以直接进行乘法运算(注意
n
后缀):NB:在浏览器中,您不需要显式调用
toString()
,但上面的Stack Snippet控制台实现是有限的,因此它需要它。kzipqqlq2#
在Chrome中,你可以使用
BigInt
算法来处理任意大整数(通常声明适用),运行这个例子看看它是否有所不同。