Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 乘字符串_Javascript_Algorithm_Multiplication - Fatal编程技术网

Javascript 乘字符串

Javascript 乘字符串,javascript,algorithm,multiplication,Javascript,Algorithm,Multiplication,问题集-给定两个表示为字符串的非负整数num1和num2,返回num1和num2的乘积,也表示为字符串 我的算法似乎对1-9的回文测试用例以外的所有测试用例都很有效 更新 Javascript有一个解析方法,但我不想使用它,因为问题来自leetcode,或者事实上来自任何这样的站点,问题集明确地说明了这一点 //**输入:** var n1=“123456789” var n2=“987654321” var乘法=函数(str1、str2){ var和=0,k=1; 对于(变量i=str1.l

问题集-给定两个表示为字符串的非负整数num1和num2,返回num1和num2的乘积,也表示为字符串

我的算法似乎对1-9的回文测试用例以外的所有测试用例都很有效

更新

Javascript有一个解析方法,但我不想使用它,因为问题来自leetcode,或者事实上来自任何这样的站点,问题集明确地说明了这一点

//**输入:**
var n1=“123456789”
var n2=“987654321”
var乘法=函数(str1、str2){
var和=0,k=1;
对于(变量i=str1.length-1;i>=0;i--){
var val1=parseInt(str1[i],10)*k;
k*=10;
var d=1;
对于(var j=str2.length-1;j>=0;j--){
var val2=parseInt(str2[j],10)*d;
d*=10;
总和+=val1*val2;
}
}
返回sum.toString();
};

log(multiply(n1,n2))
使用Chrome,您可以使用任意(通常免责声明适用)大整数访问
BigInt
算术。运行该示例,看看它是否会产生影响

设p1=BigInt(100000000)*BigInt(123456789)+BigInt(123456789)
,p2=BigInt(100000000)*BigInt(987654321)+BigInt(987654321)
;
log(`standard:=${123456789*987654321}`);
log(`standard large:=${123456789123456789*987654321987654321}`);

log(`BigInt:=${p1*p2}`)使用Chrome,您可以使用任意大整数(通常免责声明适用)访问
BigInt
算法。运行该示例,看看它是否会产生影响

设p1=BigInt(100000000)*BigInt(123456789)+BigInt(123456789)
,p2=BigInt(100000000)*BigInt(987654321)+BigInt(987654321)
;
log(`standard:=${123456789*987654321}`);
log(`standard large:=${123456789123456789*987654321987654321}`);

log(`BigInt:=${p1*p2}`)这种练习的目的可能是实现自己的大数乘法算法。当一个整数(本例中的乘积)需要超过15-16位时,JavaScript无法以足够的精度存储该整数,因此如果只对输入使用乘法运算符,结果将是错误的

即使将较小的乘积加在一个数字变量中,该总和最终也会超过0的极限。您需要将较小计算的结果存储在另一个数据结构中,如数组或字符串

以下是的一个简单实现:

函数乘法(a,b){
常量乘积=数组(a.length+b.length)。填充(0);
for(设i=a.length;i--;null){
让进位=0;
for(设j=b.length;j--;null){
乘积[1+i+j]+=进位+a[i]*b[j];
进位=数学楼层(乘积[1+i+j]/10);
产品[1+i+j]=产品[1+i+j]%10;
}
产品[i]+=进货;
}
退货产品。加入(“”)。替换(/^0*(\d)/,“$1”);
}

log(乘法(“123456789”、“987654321”)这种练习的目的可能是实现自己的大数乘法算法。当一个整数(本例中的乘积)需要超过15-16位时,JavaScript无法以足够的精度存储该整数,因此如果只对输入使用乘法运算符,结果将是错误的

即使将较小的乘积加在一个数字变量中,该总和最终也会超过0的极限。您需要将较小计算的结果存储在另一个数据结构中,如数组或字符串

以下是的一个简单实现:

函数乘法(a,b){
常量乘积=数组(a.length+b.length)。填充(0);
for(设i=a.length;i--;null){
让进位=0;
for(设j=b.length;j--;null){
乘积[1+i+j]+=进位+a[i]*b[j];
进位=数学楼层(乘积[1+i+j]/10);
产品[1+i+j]=产品[1+i+j]%10;
}
产品[i]+=进货;
}
退货产品。加入(“”)。替换(/^0*(\d)/,“$1”);
}

log(乘法(“123456789”、“987654321”)代码应该做什么?我更新了一个详细的问题陈述,而不仅仅是说明问题的主题行。如果您尝试将两个字符串相乘,那么您的代码会遇到整数溢出问题。你不应该用整数来计算结果乘积,只要用一个字符串作为容器来保存你的最终乘积。@cricket_007我已经给出了输入测试用例,它失败了,即回文乘法。你为什么不分析两个数字,然后相乘呢?迭代这些数字的目的是什么?另外,您是否考虑过整数溢出?代码应该做什么?我更新了一个详细的问题陈述,而不仅仅是说明问题的主题行。如果您尝试将两个字符串相乘,那么您的代码会遇到整数溢出问题。你不应该用整数来计算结果乘积,只要用一个字符串作为容器来保存你的最终乘积。@cricket_007我已经给出了输入测试用例,它失败了,即回文乘法。你为什么不分析两个数字,然后相乘呢?迭代这些数字的目的是什么?还有,你考虑过整数溢出吗?该死,我从这些模运算开始,但放弃得太早了。是的,你是对的,读到的只是精度范围。我会非常小心地前进。现在我知道了!顺便问一下,(让j=b.length;j--;null){
的这一行与循环的正常
声明不同吗?这与(让j=b.length-1;j>=0;j--)的
类似
;但是减法发生在条件应该出现的地方,这使得
循环的
的第三部分过时。为了强调这一点,我在那里放了一个
null
。但是选择您更喜欢的。这取决于后缀
--
首先出现的事实