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

问题描述 投票:82回答:5

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

c# math operators division modulo
5个回答
121
投票

问此类问题之前,请检查MSDN documentation

当您将两个整数相除时,结果始终是整数。例如,7/3的结果为2。要确定7/3的余数,请使用余数运算符(%)。

int a = 5;
int b = 3;

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

82
投票

还有Math.DivRem

Math.DivRem

14
投票

使用quotient = Math.DivRem(dividend, divisor, out remainder); 运算符进行除法:

/

使用result = a / b; 运算符进行模除:

%

14
投票

有趣的事实!

'模数'操作定义为:

result = a % b;

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

因此,您可以自行滚动,尽管它的速度要比内置的%运算符慢:

Modular Arithmetic

编辑:哇,原来在这里很烂,谢谢@joren抓住我

[现在,我依靠C#中的除法+强制转换为int等于public static int Mod(int a, int n) { return a - (int)((double)a / n) * n; } (即,它除去了小数),但是“真正的”实现将是这样的:

Math.Floor

实际上,您可以通过以下方法查看%和“真实模量”之间的差异:

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

结果:

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);
}

-4
投票

从用户读取两个整数。然后计算/显示余数和商,

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  
© www.soinside.com 2019 - 2024. All rights reserved.