我有一个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());
答案 0 :(得分:1)
代码中几乎没有错误:
else-if
而不是if
。pow
而不是x
var
与let
或i
一起使用,因此它将成为全局变量。使用let
或var
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());
此外,如果删除result
和if
块中的else if
的重新声明会更好。它不会影响您的输出,但仍然会。
注意:正如@ASDFGerte在注释中正确指出的那样,OP的代码还有其他缺陷,但是我认为这仍然可以回答他的主要关注和实际问题。