首页 > 解决方案 > 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());

标签: javascriptmath

解决方案


代码中有几个错误:

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


推荐阅读