【问题标题】:Java Remainder of Integer Divison?整数除法的Java余数?
【发布时间】:2015-12-23 01:53:50
【问题描述】:

我正在搜索这个主题,但我仍然不明白,如果有人能详细说明,我将非常感谢。

我的任务是将两个变量除以整数除以余数。 问题是,我不知道余数是什么,现在我做了类似的事情,这是我通过互联网搜索发现的:

int a;
int b;
int remainder = Math.Pow(a,2) % b;

System.out.println("a^2 / b = " + Math.Pow(a,2) / b);
System.out.println("remainder = " + remainder);

如果我例如设置 (a = 43) 和 (b = 67)

那么我会得到这个结果:

a^2 / b = 27
remainder = 40

现在因为我不知道剩下的是什么(这只是来自互联网的建议)我不知道这是否是正确的答案..?

感谢您的帮助,

亲切的问候

【问题讨论】:

  • 在整数除法中,余数不适合除数,即如果您计算 11/4,整数结果将为 2(4 适合 2 次到 11),余数为 3 (因为 11 - 2*4 = 3)。或者换一种说法:如果你有 11 个苹果,想平均分给 4 个人,你只能给每个人 2 个苹果,然后剩下 3 个(剩余)。
  • “因为我不知道余数是什么”——所以你不明白余数是什么? 43*43 是 1849,1849 除以 67 是 27,余数是 40 - 27 * 67 = 1809。不清楚你的问题在这里。这有点像说“这里是做加法的代码......它说 4 + 5 是 9,但我不确定这是否正确”。
  • 好的,谢谢.. 英语不是我的母语,所以也许这就是我听不懂的原因.. 也因为我数学很烂。

标签: java math divide


【解决方案1】:

如果您正在寻找可以使用的数学模运算

int x = -22;
int y = 24;
System.out.println(Math.floorMod(x, y));

如果您对数学模数(仅余数)不感兴趣,那么您可以使用

int x = -22;
int y = 24;
System.out.println(x%y);

【讨论】:

  • 如果您需要模数计算(对于正数y),您也可以执行技巧((x % y) + y) % y,但要注意这可能会导致整数溢出(对于非常大的y 值) )。但是,它确实跳过了函数调用。然而,这是一种优化,只应在需要时应用。
【解决方案2】:
    public static void main(String[] args) {
        int dividend = 139, divisor = 7;

        int quotient = dividend / divisor;
        int remainder = dividend % divisor;

        System.out.println("The Quotient is = " + quotient);
        System.out.println("The Remainder is = " + remainder);
    }

输出:

商数 = 19

余数 = 6

【讨论】:

    【解决方案3】:

    是的,% 运算符将返回整数除法的余数。

    要了解有关整数除法其余部分的更多信息,请查看Wikipedia:

    如果 a 和 d 是整数,且 d 不为零,则可以证明存在唯一整数 q 和 r,使得 a = qd + r 且 0 ≤ r

    【讨论】:

    • 或多或少,我仍然需要知道如何在代码中做到这一点。但据我所知,现在使用 %-operator 是正确的方法。
    • 是的。刚刚编辑了我的答案以澄清这一点。
    【解决方案4】:

    int remainder = a % b; 会给你排序。余数运算符返回除法的余数。


    请注意,余数运算符也称为模运算符。但是,这对于 Java 是不正确的,因为如果左操作数 a 为负数,Java 将返回负值。

    【讨论】:

    • 它不是模运算符。它是一个余数运算符。它们不是一回事。
    • @DisasterCoder 取决于您的实施规范。你希望它是一个简单的余数(它可以有负值),还是数学上正确的模运算。
    • 对于这项任务,我相信只要求简单的余数,但是最好同时了解这两种方式,对吗?那么数学上正确的模运算是什么?
    【解决方案5】:

    % 运算符将返回整数除法的余数。

    哪些模块实际上在幕后工作?

    模块倾向于从数字中删除cycles,直到它达到一个小于循环数的正数,我们称之为模OR一个负数,我们称之为reminder。

    但是,使用% 操作符会耗费大量时间。

    为了避免在获得相同结果的同时使用%,我们可以使用以下内容:

    • While(a >= n) a -= n;(当a 为正数时)
    • While(a < 0) a += n;(当a为负数时)

    • a = n*q + r 表示r = a - n*q 而q is the integer division of a/n 表示a%n == a - n * Math.toIntExact(a/n) 当a 为正数时就足够了。

    • 虽然a 是一个负数,但我们可以使用(a%n + n) % n,它会为您提供模块。

    时钟案例场景:

    如果现在是 9 点,那么 4 小时后是几点 => 9+4 = 13h => 13%12=1 while 12 is the cycle number in the clock

    如果我们需要从现在开始计算24 小时(昨天)之前的时间,即9 O'clock,那么: 24(2*12) => Yesterday 意味着 9-24 = -15h 虽然正确答案是 9 ,我们将使用 (a%n + n) % n 而 a%n == (a - n * Math.toIntExact(a/n)) 然后 -15 - 12 * Math.toIntExact(-15/12) = -3 => -3 + 12 = 9 => 9%12 => @ 987654352@哪个是正确答案。

    这是时钟场景的代码:

    public static void main(String args[]){
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt(); // a = -15
        int n = scanner.nextInt(); // cycle = 12
    
        int reminder = a - (n * Math.toIntExact(a / n));
        int reminder_plus_n = (reminder + n);
        int modulo = reminder_plus_n - (n * Math.toIntExact(reminder_plus_n / n));
        System.out.println(modulo); // Answer = 9
    } 
    

    【讨论】:

      【解决方案6】:

      您可以使用商和余数来计算计数和余数。

      这是我为 Minecraft 插件编写的一些代码。

      public class Division {
          public static ModuloDivResult divideMod(double a, double b) {
              double remainder = a % b;
              return new ModuloDivResult((a / b) - (remainder / b), remainder);
          }
      }
      

      我们还需要两个值的容器。

      public class ModuloDivResult {
          private double remainder;
          private double count;
      
          public ModuloDivResult(double count, double remainder) {
              this.remainder = remainder;
              this.count = count;
          }
      
          public double getRemainder() {
              return remainder;
          }
      
          public double getCount() {
              return count;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-18
        • 2017-08-08
        相关资源
        最近更新 更多