Javascript 求两个数的无模余数
说明:编写一个名为“模”的函数。给定2个数字,“模”返回num1除以num2后的余数 这是到目前为止我的代码。当我在repl.it上运行它时,它给出了正确的余数,但是当我提交程序时,它进入了一个无限循环,我不知道为什么。我认为for循环中的返回函数会自动退出它。任何帮助都将不胜感激,谢谢。基本上,我一直在增加数字2,直到它要么达到数字1,要么超过它。如果它更高,我减去数字2一次,然后找出差值Javascript 求两个数的无模余数,javascript,Javascript,说明:编写一个名为“模”的函数。给定2个数字,“模”返回num1除以num2后的余数 这是到目前为止我的代码。当我在repl.it上运行它时,它给出了正确的余数,但是当我提交程序时,它进入了一个无限循环,我不知道为什么。我认为for循环中的返回函数会自动退出它。任何帮助都将不胜感激,谢谢。基本上,我一直在增加数字2,直到它要么达到数字1,要么超过它。如果它更高,我减去数字2一次,然后找出差值 function modulo(num1, num2) { if(num1 === 0) {
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);
函数模(num1,num2){
如果(num1==0){
返回0;
}
如果(num2==0){
返回NaN;
}
如果(isNaN(num1)==true | | isNaN(num2)==true){
返回NaN;
}
var i=0;
对于(i=0;i num1){
i=i-num2;
控制台日志(i,num1);
返回num1-i;
}
}
}
var输出=模(25,4);
控制台日志(输出);
我不完全确定无限循环出现在哪里;我已经将您的代码插入控制台,可以很好地调用该函数。您使用哪个站点进行验证 另外,在不改变太多练习的情况下,我想指出几个可以整合代码以提高可读性的小领域:
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)
都是“真的”
此外,请记住,您可以使用所有赋值运算符;它是完全可选的,但是因为您使用了一个(i+=num2;
),所以我想我应该指出,您可以使用另一个代码(i-=num2;
)
快乐编码!:) 这可能是另一种选择: 函数模(num1,num2){ if(isNaN(num1)| isNaN(num2)){ 返回NaN; } var strResult=(num1/num2).toString(); 分母变数= parseFloat(strResult.substr(strResult.indexOf(“.”)); var余数=数学四舍五入(小数部分*num2); 返回剩余部分; } log(模(77,9),(77%9));//5. log(模(549123),(549%123));//57 log(模(33,6)、(33%6));//3
这非常简单,应该可以一直使用你说的“提交程序”是什么意思?对不起,我在一个使用repl.it的javascript准备网站上。Submit使用许多测试来确保程序正常运行。所以它会测试负数,0和NaN,以确保模数是正确的。如果你不介意我问的话,它是什么网站?这很奇怪,因为我在控制台中调用的函数很好。另外,有关如何清理代码的一些快速提示,请参见下面的答案。:)看起来它对我有用(正数)——你的确切问题是什么?为什么你认为你有一个无限循环?一个完全不同的实现并不能解释为什么OP可能在自己的版本上有问题。检查后,模数只是
num-mod*Math.floor(num/mod)
。但我不认为这有助于行动。
function modulo(num1, num2) { var div = num1/num2;
var remainder = div - Math.floor(div); // gives the decimal point value left out from the division
return Math.round(remainder * num2); // multiplies the remainder with num2 and gives a whole number value
}