JavaScript中的两个数字相乘,仅使用加法和减法(无日志)

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;

我尝试将两个数字相乘,只使用加法/减法来练习算法,因为我是JavaScript新手。我用它来处理日志,但我只想尝试加法/减法。如果没有一个子程序——我在底部的addY函数,有没有办法做到这一点?如果知道如何在没有for循环的情况下做到这一点,那也太好了

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好主意!