How can I calculate divide and modulo for integers in C#?

前端 未结 5 1180
醉梦人生
醉梦人生 2020-12-01 11:28

How can I calculate division and modulo for integer numbers in C#?

相关标签:
5条回答
  • 2020-12-01 12:13

    Division is performed using the / operator:

    result = a / b;
    

    Modulo division is done using the % operator:

    result = a % b;
    
    0 讨论(0)
  • 2020-12-01 12:17

    Before asking questions of this kind, please check 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
    
    0 讨论(0)
  • 2020-12-01 12:17

    There is also Math.DivRem

    quotient = Math.DivRem(dividend, divisor, out remainder);
    
    0 讨论(0)
  • 2020-12-01 12:25

    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();
    
    0 讨论(0)
  • 2020-12-01 12:26

    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  
    
    0 讨论(0)
提交回复
热议问题