作者:倒霉熊丶JO_205 | 来源:互联网 | 2022-12-10 11:01
问题集 -给定两个非负整数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))
我不明白怎么了。其他回文式也可以。
1> trincot..:
进行此练习的目的可能是针对大数实现自己的乘法算法。当一个整数(在这种情况下为乘积)需要超过15至16个数字时,Javascript将无法以足够的精度存储该整数,因此,如果仅对输入使用乘法运算符,则结果将是错误的。
即使您用数字变量对较小的乘积求和,该和最终仍将超过的限制Number.MAX_SAFE_INTEGER
。您需要将较小的计算结果存储在另一个数据结构中,例如数组或字符串。
这是长乘法算法的简单实现:
function multiply(a, b) {
const product = Array(a.length+b.length).fill(0);
for (let i = a.length; i--; null) {
let carry = 0;
for (let j = b.length; j--; null) {
product[1+i+j] += carry + a[i]*b[j];
carry = Math.floor(product[1+i+j] / 10);
product[1+i+j] = product[1+i+j] % 10;
}
product[i] += carry;
}
return product.join("").replace(/^0*(\d)/, "$1");
}
console.log(multiply("123456789", "987654321"));