如何在 C # 中计算整数的除法和模?

如何在 C # 中计算整数的除法和模?

341938 次浏览

Here's an answer from the MSDN documentation.

When you divide two integers, the result is always an integer. For example, the result of 7 / 3 is 2. To determine the remainder of 7 / 3, use the remainder operator (%).

int a = 5;
int b = 3;


int div = a / b; //quotient is 1
int mod = a % b; //remainder is 2

Division is performed using the / operator:

result = a / b;

Modulo division is done using the % operator:

result = a % b;

Fun fact!

The 'modulus' operation is defined as:

a % n ==> a - (a/n) * n

Ref:Modular Arithmetic

So you could roll your own, although it will be FAR slower than the built in % operator:

public static int Mod(int a, int n)
{
return a - (int)((double)a / n) * n;
}

Edit: wow, misspoke rather badly here originally, thanks @joren for catching me

Now here I'm relying on the fact that division + cast-to-int in C# is equivalent to Math.Floor (i.e., it drops the fraction), but a "true" implementation would instead be something like:

public static int Mod(int a, int n)
{
return a - (int)Math.Floor((double)a / n) * n;
}

In fact, you can see the differences between % and "true modulus" with the following:

var modTest =
from a in Enumerable.Range(-3, 6)
from b in Enumerable.Range(-3, 6)
where b != 0
let op = (a % b)
let mod = Mod(a,b)
let areSame = op == mod
select new
{
A = a,
B = b,
Operator = op,
Mod = mod,
Same = areSame
};
Console.WriteLine("A      B     A%B   Mod(A,B)   Equal?");
Console.WriteLine("-----------------------------------");
foreach (var result in modTest)
{
Console.WriteLine(
"{0,-3} | {1,-3} | {2,-5} | {3,-10} | {4,-6}",
result.A,
result.B,
result.Operator,
result.Mod,
result.Same);
}

Results:

A      B     A%B   Mod(A,B)   Equal?
-----------------------------------
-3  | -3  | 0     | 0          | True
-3  | -2  | -1    | -1         | True
-3  | -1  | 0     | 0          | True
-3  | 1   | 0     | 0          | True
-3  | 2   | -1    | 1          | False
-2  | -3  | -2    | -2         | True
-2  | -2  | 0     | 0          | True
-2  | -1  | 0     | 0          | True
-2  | 1   | 0     | 0          | True
-2  | 2   | 0     | 0          | True
-1  | -3  | -1    | -1         | True
-1  | -2  | -1    | -1         | True
-1  | -1  | 0     | 0          | True
-1  | 1   | 0     | 0          | True
-1  | 2   | -1    | 1          | False
0   | -3  | 0     | 0          | True
0   | -2  | 0     | 0          | True
0   | -1  | 0     | 0          | True
0   | 1   | 0     | 0          | True
0   | 2   | 0     | 0          | True
1   | -3  | 1     | -2         | False
1   | -2  | 1     | -1         | False
1   | -1  | 0     | 0          | True
1   | 1   | 0     | 0          | True
1   | 2   | 1     | 1          | True
2   | -3  | 2     | -1         | False
2   | -2  | 0     | 0          | True
2   | -1  | 0     | 0          | True
2   | 1   | 0     | 0          | True
2   | 2   | 0     | 0          | True

There is also Math.DivRem

quotient = Math.DivRem(dividend, divisor, out remainder);

Read two integers from the user. Then compute/display the remainder and quotient,

// When the larger integer is divided by the smaller integer
Console.WriteLine("Enter integer 1 please :");
double a5 = double.Parse(Console.ReadLine());
Console.WriteLine("Enter integer 2 please :");
double b5 = double.Parse(Console.ReadLine());


double div = a5 / b5;
Console.WriteLine(div);


double mod = a5 % b5;
Console.WriteLine(mod);


Console.ReadLine();