JS简单数学任务(将输入的数字求幂)

时间:2019-06-20 14:50:51

标签: javascript math

我有一个js任务。我的程序应从用户处获取一个数字,并将其插入电源。我已经解决了正幂,但是负幂的算法始终会给出正答案,并且在为零幂设置选项后,每个变体都会以-1的形式返回。请帮助我发现错误。

function powX(x, pow) {
  x = +prompt('Insert a number: ');
  pow = +prompt('Insert a power: ');
  var result;
  if (x > 0) {
    var result = x;
    for (i = 1; i < pow; i++) {
      result *= x;
    }
  }
  if (x < 0) {
    var result = x;
    for (i = 1; i < Math.abs(pow); i++) {
      result /= x;
    }
  } else {
    result = 1;
  }

  return result;
}

console.log(powX());

2 个答案:

答案 0 :(得分:1)

代码中几乎没有错误:

  • 您应该在第二个代码块中使用else-if而不是if
  • 您应检查pow而不是x
  • 您未将varleti一起使用,因此它将成为全局变量。使用letvar
  • 您正在var块内再次使用if,但是用var声明的变量具有函数作用域,因此不会引发错误。但是使用let会破坏您的代码。不要一次又一次地声明result

function powX(x, pow) {
  x = +prompt('Insert a number: ');
  pow = +prompt('Insert a power: ');
  var result;
  if (pow > 0) {
    result = x;
    for (let i = 1; i < pow; i++) {
      result *= x;
    }
  }
  else if (pow < 0) {
    result = x;
    for (let i = 0; i <= Math.abs(pow); i++) {
      result /= x;
    }
  } else {
    result = 1;
  }

  return result;
}

console.log(powX());

您不需要两个循环,一个循环可进行除法,而另一个循环则使用乘法。只需将result乘以x,最后将结果乘以function powX(x, pow) { x = +prompt('Insert a number: '); pow = +prompt('Insert a power: '); if(pow === 0) return 1; var result = x; for (let i = 1; i < Math.abs(pow); i++) { result *= x; } return pow < 0 ? (x/result/x) : result; } console.log(powX());或根据条件对其进行除法即可。

{{1}}

答案 1 :(得分:0)

else if用于第二个条件,否则,其else块将始终针对x> 0执行,将结果设置为1。

function powX(x, pow) {
  x = +prompt('Insert a number: ');
  pow = +prompt('Insert a power: ');
  var result;
  if (x > 0) {
    result = x;
    for (i = 1; i < pow; i++) {
      result *= x;
    }
  }
  else if (x < 0) {
    result = x;
    for (i = 1; i < Math.abs(pow); i++) {
      result /= x;
    }
  } else {
    result = 1;
  }

  return result;
}

console.log(powX());

此外,如果删除resultif块中的else if的重新声明会更好。它不会影响您的输出,但仍然会。

注意:正如@ASDFGerte在注释中正确指出的那样,OP的代码还有其他缺陷,但是我认为这仍然可以回答他的主要关注和实际问题。