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 division with remainder.. The problem is, that I have no clue what a remainder is, for now I did something like that, this is what I found by searching through the internet:
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);
if I for example set (a = 43) and (b = 67)
Then I will get this reslut:
a^2 / b = 27
remainder = 40
Now since I have no idea what the remainder is (this is just a suggestion form the internet) I have no idea if this is the correct answer..?
Thanks for any help,
Kind Regards
If you are looking for the mathematical modulo operation you could use
int x = -22;
int y = 24;
System.out.println(Math.floorMod(x, y));
If you are not interested in the mathematical modulo (just the remainder) then you could use
int x = -22;
int y = 24;
System.out.println(x%y);
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);
}
Output:
The Quotient is = 19
The Remainder is = 6
Yes, the %
operator will return the remainder of the Integer division.
To know more about the remainder of the Integer division check out Wikipedia:
If a and d are integers, with d non-zero, it can be proven that there exist unique integers q and r, such that a = qd + r and 0 ≤ r < |d|. The number q is called the quotient, while r is called the remainder.
int remainder = a % b;
will sort you. The remainder operator returns the remainder of the division.
Note that the remainder operator is also called the modulo operator. However, this is incorrect for Java as Java will return a negative value if the left operand a
is negative.
%
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;
(whena
is a positive number)While(a < 0) a += n;
(whena
is a negative number)a = n*q + r
that meansr = a - n*q
Whileq is the integer division of a/n
which meansa%n == a - n * Math.toIntExact(a/n)
Which is sufficient whena
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
}
来源:https://stackoverflow.com/questions/32778671/java-remainder-of-integer-divison