说明:编写一个名为“modulo”的函数。给定2个数字,“modulo”在将num1除以num2之后返回余数。
到目前为止,这是我的代码。当我在repl.it上运行它时,它会给出正确的余数,但是当我提交程序时,它会进入一个无限循环,我不知道为什么。我认为for循环中的返回函数会自动退出它。任何帮助将不胜感激,谢谢。基本上我不断添加number2,直到它达到1或高于它。如果它变高,我将数字2减去一次,然后找出差异。
function modulo(num1, num2) {
if(num1 === 0) {
return 0;
}
if(num2 === 0) {
return NaN;
}
if(isNaN(num1) === true || isNaN(num2) === true) {
return NaN;
}
var i = 0;
for( i = 0; i <= num1;) {
i += num2;
if(i === num1) {
return 0;
}
else if(i > num1) {
i = i - num2;
console.log(i, num1);
return num1 - i;
}
}
}
var output = modulo(25, 4);
console.log(output);
答案 0 :(得分:0)
我不完全确定无限循环出现在哪里;我已将您的代码插入控制台,我可以正常调用该函数。您使用哪个网站进行验证?
此外,在不改变运动量的情况下,我想指出几个小区域,您可以整合代码以提高可读性:
if(num2 === 0) {
return NaN;
}
if(isNaN(num1) === true || isNaN(num2) === true) {
return NaN;
}
可以精炼成
if (num2 === 0 || isNaN(num1) || isNaN(num2)) {
return NaN;
}
因为在JavaScript中,布尔值的工作方式使得具有实际价值的所有内容都被认为是真实的,即isNaN(num1)
和isNaN(num2)
是&#34; true&#34;默认情况下。
另外,请记住,您可以使用所有赋值运算符;它完全是可选的,但由于您使用了一个(i += num2;
),我想我可以指出您可以使用另一个代码(i -= num2;
)。
快乐的编码! :)
答案 1 :(得分:0)
这可能是另一种选择:
function modulo(num1, num2) {
if(isNaN(num1) || isNaN(num2) ) {
return NaN;
}
var strResult = (num1/num2).toString();
var decimalPart =
parseFloat(strResult.substr(strResult.indexOf(".")));
var remainder = Math.round(decimalPart*num2);
return remainder;
}
console.log(modulo(77,9), (77%9)); // 5
console.log(modulo(549,123), (549%123)); // 57
console.log(modulo(33,6), (33%6)); // 3
答案 2 :(得分:0)
Dictionary
这非常简单,应该始终有效