JavaScript中的两个数字相乘,仅使用加法和减法(无日志)
我尝试将两个数字相乘,只使用加法/减法来练习算法,因为我是JavaScript新手。我用它来处理日志,但我只想尝试加法/减法。如果没有一个子程序——我在底部的addY函数,有没有办法做到这一点?如果知道如何在没有for循环的情况下做到这一点,那也太好了JavaScript中的两个数字相乘,仅使用加法和减法(无日志),javascript,algorithm,math,Javascript,Algorithm,Math,我尝试将两个数字相乘,只使用加法/减法来练习算法,因为我是JavaScript新手。我用它来处理日志,但我只想尝试加法/减法。如果没有一个子程序——我在底部的addY函数,有没有办法做到这一点?如果知道如何在没有for循环的情况下做到这一点,那也太好了 var multiply = function(x, y) { //add y x times // function log10(val) { // return Math.log(val) / Math.LN10;
var multiply = function(x, y) {
//add y x times
// function log10(val) {
// return Math.log(val) / Math.LN10;
// }
// return Math.round(Math.pow(10, (log10(x) + log10(y))))
if(x === 1){
return y;
}
if(y === 1){
return x;
}
if (x === 0 || y === 0) {
return 0;
}
//if one is negative
if(x < 0 ^ y <0){
return -multiply(Math.abs(x), Math.abs(y))
}
//if both are negative
if(x<0 && y<0){
return multiply(Math.abs(x), Math.abs(y));
}
//subroutine:
var addY = function (x, y){
var total= 0;
for(var i = 0; i<x; i++){
total += y;
}
return total;
}
return addY(x, y);
};
console.log(multiply(55, -2))
// ---> returns -110 woohoo!
如果要乘法,只需做一个循环:
for(var i = 0; i<y; i++){
x +=x;
}
如果要乘法,只需做一个循环:
for(var i = 0; i<y; i++){
x +=x;
}
我使用while循环而不是for来实现这一点,但我认为您始终需要某种迭代
var multiply = function(x, y) {
if (y === 0) {
return 0;
}
var minus = y < 0;
if (minus) {
y = -y;
}
var total = x;
while (y > 1) {
total += x;
y--;
}
return minus ? -total : total;
}
我使用while循环而不是for来实现这一点,但我认为您始终需要某种迭代
var multiply = function(x, y) {
if (y === 0) {
return 0;
}
var minus = y < 0;
if (minus) {
y = -y;
}
var total = x;
while (y > 1) {
total += x;
y--;
}
return minus ? -total : total;
}
正如其他人所指出的,如果使用循环,乘法很容易。唯一需要注意的是,在使用循环将变量相加之前,您需要将变量设置为正值,否则将引入无限循环的风险 一种简单的方法是使用递归在遇到负数时切换符号
function multiply(a, b) {
if (a < 0) {
return -(multiply(-a, b))
} else if (b < 0) {
return -(multiply(a, -b))
} else {
var total = 0;
// math to calculate product goes here
return total;
}
}
x
=
正如其他人所指出的,如果使用循环,乘法很容易。唯一需要注意的是,在使用循环将变量相加之前,您需要将变量设置为正值,否则将引入无限循环的风险 一种简单的方法是使用递归在遇到负数时切换符号
function multiply(a, b) {
if (a < 0) {
return -(multiply(-a, b))
} else if (b < 0) {
return -(multiply(a, -b))
} else {
var total = 0;
// math to calculate product goes here
return total;
}
}
x
=
函数倍数x,y{
var乘积=0,符号=x>0?1:-1,y=x>0?y:0-y;
如果x&&y做乘积+=y;而x-=符号;
退货产品;
}
5,7;
a-5,7;
5,-7;
a-5,-7;
0,7;
5,0
函数倍数x,y{
var乘积=0,符号=x>0?1:-1,y=x>0?y:0-y;
如果x&&y做乘积+=y;而x-=符号;
退货产品;
}
5,7;
a-5,7;
5,-7;
a-5,-7;
0,7;
5,0;为了避免作弊,0-a可以吗?@Jiggsson好主意!为了避免作弊,0-a可以吗?@Jiggsson好主意!