Saltar al contenido

¿Cómo puedo calcular la división y el módulo para números enteros en C#?

La guía paso a paso o código que encontrarás en este artículo es la solución más eficiente y efectiva que hallamos a esta duda o dilema.

Solución:

Antes de hacer preguntas de este tipo, consulte la documentación de MSDN.

Cuando divides dos números enteros, el resultado siempre es un número entero. Por ejemplo, el resultado de 7/3 es 2. Para determinar el resto de 7/3, utilice el operador de resto (%).

int a = 5;
int b = 3;

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

También hay Math.DivRem

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

¡Hecho de la diversión!

La operación ‘módulo’ se define como:

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

Ref: Aritmética Modular

Vos tambien pudo ruede el suyo, aunque será MUCHO más lento que el operador % integrado:

public static int Mod(int a, int n)

    return a - (int)((double)a / n) * n;

Editar: wow, me expresé bastante mal aquí originalmente, gracias @joren por atraparme

Ahora, aquí confío en el hecho de que la división + cast-to-int en C# es equivalente a Math.Floor (es decir, baja la fracción), sino un “true” la implementación sería algo así como:

public static int Mod(int a, int n)

    return a - (int)Math.Floor((double)a / n) * n;

De hecho, puedes ver las diferencias entre % y “true módulo” con lo siguiente:

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)
 3,-10 

Resultados:

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  

Te mostramos las reseñas y valoraciones de los lectores

Si te gustó nuestro trabajo, tienes el poder dejar un tutorial acerca de qué le añadirías a este tutorial.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *