【问题标题】:How can I make 5 mod 5 = 5 instead of zero?我怎样才能使 5 mod 5 = 5 而不是零?
【发布时间】:2017-07-18 18:16:00
【问题描述】:

我正在制作一个使用 mod 5 的程序。

所以我将输入的数字除以五并返回余数。

var mod5 = function (xx) {
     var mod = 5;
     return ((xx % 5) + 5) % 5;
}

因此6 = 14 = 48 = 3

按照这个规则,所有的东西都可以被5 = 0整除,

为了让我的程序运行,5, 10, 15, 20 ... mod 5,所有必须 = 5 而不是 0

但所有其他数字都需要保持不变。最简单的方法是什么?

附:我对编程非常陌生,如果这没有意义,我很抱歉。

【问题讨论】:

  • 试试 (xx % 5) || 5
  • 如果结果为零只需加 5?你的要求很奇怪,因为5 % 5 实际上是0
  • 我认为你的问题很好,但你不应该命名你的函数 mod,因为它在技术上不是 mod。 5 % 5 必须为零。
  • @pointy 我知道我的要求很奇怪,但这是唯一可行的方法。
  • 我知道你得到了答案,但我只想在你的代码中指出 ((xx % 5) + 5) % 5 实际上与 xx % 5 是一回事

标签: javascript modulo


【解决方案1】:
var mod_positive = var(xx, yy = 5){
    return ((xx - 1) %% yy) + 1;
}

这个问题是重复的: How can I modulo when my numbers start from 1, not zero?

【讨论】:

    【解决方案2】:
    var mod5 = function (xx) {
      return (xx % 5) || 5
    }
    

    如果不为零,该函数将返回xx mod 5,否则返回5,更多解释:

    xx % 5 将产生介于 -4 和 4 之间的任意数字 -4 <= xx % 5 <= 4,然后,OR logical operator 将该结果与数字 5 进行比较,OR 逻辑运算符的工作方式如下:

    如果运算符左侧的值为true,或truthy,它将独立于右侧的值返回。

    如果右边的值为true,或truthy,左边的值为false,或falsy,则返回。

    否则,如果没有一个值是true或truthy,则返回false

    在这种情况下,只有xx不是5的倍数时才会返回xx % 5,否则返回5。

    希望有帮助:)

    【讨论】:

    • 简单而优雅,但你应该解释它为什么有效。
    • @Paul 会的 :) 给我一秒钟
    • @Paul 你去 :)
    • 正是我想要的。
    【解决方案3】:

    假设如果传入 0,您希望返回 0 而不是 5。

    var mod5 = function(xx) {
        var mod = 5;
        if (!xx)
            return 0;
        if (xx % mod === 0)
            return mod;
        return xx % mod;
    }
    

    【讨论】:

    • @George - 是的,但是为了在 xx === 0 时仍然返回 0,您必须处理这种情况。如果您将 0 传递给之前的所有解决方案,您将得到 5。
    【解决方案4】:
    function mod5(x) {
      var result = x % 5; 
      if (result === 0) return 5;
      return result;
    }
    

    根据您的要求,任何能被 5 整除的东西都会产生 5。其他一切都保持不变。

    【讨论】:

    • @Lucero 为什么不呢?什么意思?
    【解决方案5】:
    var mod5 = function (xx) {
        var mod = xx % 5;
        if(mod == 0) 
            return 5;
        else 
            return mod;
    }
    

    看起来很简单,如果5的模数为0,则返回5。

    【讨论】:

    • else 是多余的,您没有使用mod
    • OP 明确指出,如果是 5 的模数,则返回 5,but all other numbers need to remain the same。如果要求是按原样返回数字,那么是的,你是对的。但我在代码中根本看不到这一点。
    • 不确定您对 tbh 的看法。 +4 票的答案与我做的完全一样。但是哦,好吧。
    • 轻微的挑剔,但我看不出做两次 mod 的意义。
    • 好吧...多余的else 语句和多余的变量var mod = 5;。并且代码不做同样的事情,它可能会解析xx % 5两次。
    猜你喜欢
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多