我该如何处理非负 mod?

发布于 2024-12-09 18:35:09 字数 195 浏览 0 评论 0原文

当我在 Java 程序中使用运算符 % 时,我不断得到否定的答案。示例:-1%100 给出 -1。虽然这在数学上是正确的,但我想得到正常的数学解,即 99。换句话说,我想得到最小的正整数解。 Java 中是否有任何简单的解决方案(也许是我在数学中忽略的东西? - 我找不到它)?

我还想澄清一下,如果 API 中有一些东西可以做到这一点,那么一个链接就太好了。

When I use the operator % in my Java programs, I keep getting negative answers. Example: -1%100 gives -1. While this is mathematically correct, I want to get the normal mathematical solution, or 99. In other words, I want to get the smallest positive integer solution. Is there any simple solution for this in Java (perhaps something I overlooked in Math? -- I can't find it)?

I also want to clarify that if there is something in the API that does this, a link would be awesome.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

独﹏钓一江月 2024-12-16 18:35:09

你就可以这样做吗?

int d = 100;

int x = -1 % d;
if (x < 0)
    x += d;

这应该适用于任何正d

You can just do this?

int d = 100;

int x = -1 % d;
if (x < 0)
    x += d;

This should work for any positive d.

停顿的约定 2024-12-16 18:35:09

您可以执行以下操作

int myMod(int x, int modulo)
{
   return ((x % modulo) + modulo)  % modulo
}

You can do the following

int myMod(int x, int modulo)
{
   return ((x % modulo) + modulo)  % modulo
}
说不完的你爱 2024-12-16 18:35:09

这对于任何代替 d 或 x 的值都有效。

int d=100;
int x=-1%d;
while (x<0)
    x+=d;

This works, for any values in place of d or x.

int d=100;
int x=-1%d;
while (x<0)
    x+=d;
年少掌心 2024-12-16 18:35:09
i < 0 ? n - ((-i - 1) % n + 1) : i % n

例如:

class Mod {
  public static int mod(int i, int n) {
    return i < 0 ? n - ((-i - 1) % n + 1) : i % n;
  }

  public static void main(String [] args) {
    System.out.println("mod(-201, 100) == " + mod(-201, 100));
    System.out.println("mod(-200, 100) == " + mod(-200, 100));
    System.out.println("mod(17, 100) == " + mod(17, 100));
    System.out.println("mod(100, 100) == " + mod(100, 100));
  }
}

并且

$ javac Mod.java && java Mod
mod(-201, 100) == 99
mod(-200, 100) == 0
mod(17, 100) == 17
mod(100, 100) == 0

没有循环。

i < 0 ? n - ((-i - 1) % n + 1) : i % n

For example:

class Mod {
  public static int mod(int i, int n) {
    return i < 0 ? n - ((-i - 1) % n + 1) : i % n;
  }

  public static void main(String [] args) {
    System.out.println("mod(-201, 100) == " + mod(-201, 100));
    System.out.println("mod(-200, 100) == " + mod(-200, 100));
    System.out.println("mod(17, 100) == " + mod(17, 100));
    System.out.println("mod(100, 100) == " + mod(100, 100));
  }
}

And

$ javac Mod.java && java Mod
mod(-201, 100) == 99
mod(-200, 100) == 0
mod(17, 100) == 17
mod(100, 100) == 0

No loops.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文