Java Remainder of Integer Divison?

后端 未结 5 1293
甜味超标
甜味超标 2021-01-18 01:44

I was searching around about this topic but I still don\'t get it, if someone can elaborate I would be very thankful.

My task is to divide two variables as integer d

5条回答
  •  情歌与酒
    2021-01-18 02:14

    % operator will return the remainder of the Integer division.

    What modules actually does under the hood ?

    Modules tend to remove cycles from the number, until it reaches a positive number that is smaller than the number of the cycle which we call modulo OR a negative number which we call a reminder.

    However, Using % operator is time expensive.

    To avoid using % while getting the same result, we can use the following:

    • While(a >= n) a -= n; (when a is a positive number)
    • While(a < 0) a += n; (when a is a negative number)

    • a = n*q + r that means r = a - n*q While q is the integer division of a/n which means a%n == a - n * Math.toIntExact(a/n) Which is sufficient when a is a positive number.

    • While a is a negative number, we can use (a%n + n) % n Which will give you module.

    Case Scenario on Clock:

    if it is now 9 O'clock, what time after 4 hours => 9+4 = 13h => 13%12=1 while 12 is the cycle number in the clock

    What if we need to calculate time before 24 hours (Yesterday) from now which is 9 O'clock, then: 24(2*12) => Yesterday Means 9-24 = -15h While the right answer is 9 , to solve this we will use (a%n + n) % n While a%n == (a - n * Math.toIntExact(a/n)) then -15 - 12 * Math.toIntExact(-15/12) = -3 => -3 + 12 = 9 => 9%12 => 9 - 12 * Math.toIntExact(9/12) = 9 Which is the right answer.

    This is the code for the clock Scenario:

    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
    } 
    

提交回复
热议问题