对于家庭作业,我需要在使用内置模数(%)运算符将num1除以num2之后返回余数.我能够通过以下代码获得大多数测试,但我仍然坚持如何考虑给定数字的 - /+符号.我需要随身携带num1上的任何一个标志,如果num2是负数,也会返回一个正数 - 这让我想到了如何做到这一点...... :)任何清晰度都会非常感激!我不是在寻找这里的直接答案,更多的是我似乎错过了一些明显的东西......也许我需要一种新的方法?
function modulo(num1, num2) {
if (num1 === 0) {
return 0;
}
if (num2 === 0 || isNaN(num1) || isNaN(num2)) {
return NaN;
}
if (num1 < num2) {
return num1;
}
if (num1 > 0 && num2 > 0) {
var counter = num1;
while (counter >= Math.abs(num2)) {
counter = counter - num2;
}
return counter;
}
}
var output = modulo(25, 4);
console.log(output); // 1
Run Code Online (Sandbox Code Playgroud)
如果你考虑计算模数的数学过程,你可能会看到如何做到这一点,而不必诉诸于一堆案例陈述.相反,想一想,你只是计算余数:
给定2个数字a和b,您可以mod(a,b)通过执行以下操作进行计算:
q = a / b; //finding quotient (integer part only)
p = q * b; //finding product
remainder = a - p; //finding modulus
Run Code Online (Sandbox Code Playgroud)
使用这个想法,你应该能够将它传递给JS.你说你不是在寻找直接的答案,所以我会说!
编辑:这是代码,就像我在评论中所说的那样,这正是我在上面发布的伪代码:
function modulo(a,b){
q = parseInt(a / b); //finding quotient (integer part only)
p = q * b; //finding product
return a - p; //finding modulus
}
Run Code Online (Sandbox Code Playgroud)
这将返回与使用%完全相同的值
你可能想多了。您基本上在问题中陈述了解决方案:
我需要保留 num1 上的任何符号,如果 num2 为负数,则还返回正数
第二部分不准确,但我怀疑你只是说错了。除非num2为负数,否则当为负数时应返回正数。 num1
无论如何,重要的一点是,如果num1为负,结果将为负,否则结果将为正。的符号num2被丢弃。
开始编写您编写的代码(其他人很快就会指出这不是最简单的解决方案),解决方法是使用两个数字的绝对值计算余数,然后将num1的原始符号应用于结果。
function modulo(num1, num2) {
var sign = num1 < 0 ? -1 : 1;
var dividend = Math.abs(num1);
var divisor = Math.abs(num2);
if (dividend === 0) {
return 0;
}
if (dividend === 0 || isNaN(dividend) || isNaN(divisor)) {
return NaN;
}
if (dividend < divisor) {
return sign * dividend;
}
var counter = dividend;
while (counter >= divisor) {
counter = counter - divisor;
}
return sign * counter;
}
console.log( 25 % 4, modulo( 25, 4));
console.log(-25 % 4, modulo(-25, 4));
console.log( 25 % -4, modulo( 25, -4));
console.log(-25 % -4, modulo(-25, -4));Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper{min-height:100%;}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2240 次 |
| 最近记录: |