gpt4 book ai didi

javascript - 如何使用递归求解模数(不能使用 *、% 或数学运算符)

转载 作者:行者123 更新时间:2023-11-28 14:40:00 26 4
gpt4 key购买 nike

下面是我的代码,它运行得很好,只是不允许我使用“*”运算符。但在这种情况下,我不知道如何将负数转换为正数进行比较。一种选择是使用 Math.abs,但我也不允许使用它。

var modulo = function(x, y) {

if ( x === 0 && y ===0 ) return NaN;
if ( x === y ) return 0;
if ( x === 0 ) return 0;
if (x > 0 && y > 0) {
return x < y ? x : modulo(x-y,y);
}

if ( x < 0 && y < 0 ) {

return x*-1 < y*-1 ? x : modulo(x-y,y);
}

if( x > 0 && y < 0 ) {
return x < y*-1 ? x : modulo(x+y,y);
}

if ( x < 0 && y >0) {
return x*-1 < y ? x : modulo(x+y,y);
}
};

最佳答案

您可以通过使用一元减运算符 (-value) 或从零减去数字 (0 - value) 来翻转数字的符号。

无论哪种方式,都可以以比现在更简洁的方式实现取模:

var modulo = function(x, y) {
if (y === 0) { return NaN; }

if (x < 0) { return -modulo(-x, y); } // -27 % 4 -> -(27 % 4)

if (y < 0) { return modulo( x, -y); } // 27 % -4 -> 27 % 4

if (x < y) { return x; }

return modulo(x - y, y);
};

console.log(modulo( 27, 4)); // 3
console.log(modulo(-27, 4)); // -3
console.log(modulo( 27, -4)); // 3
console.log(modulo(-27, -4)); // -3
console.log(modulo(-32, 8)); // 0

为了奖励积分,这里有一个“真正的”数学模数的实现,也是在没有 /*% 的情况下实现的:

var mathModulo = function(x, y) {
if (y <= 0) { return NaN; }

if (x >= 0 && x < y) { return x; }

return mathModulo(x - (x > 0 ? y : -y), y);
};

console.log(mathModulo( 27, 4)); // 3
console.log(mathModulo(-27, 4)); // 1
console.log(mathModulo( 27, -4)); // NaN
console.log(mathModulo(-27, -4)); // NaN
console.log(mathModulo(-32, 8)); // 0

关于javascript - 如何使用递归求解模数(不能使用 *、% 或数学运算符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48348520/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com