JS简单的数学任务(将输入的数字提高到幂)



我在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());

代码中很少有错误:

  • 您应该在第二个块中使用else-if而不是if
  • 您应该检查pow而不是x
  • 您没有将varleti一起使用,因此它将成为全局变量。使用letvar
  • 您在if块中再次使用 var,但用 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());

对第二个条件使用 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());

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

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

相关内容

最新更新