2010-04-18 29 views

Respuesta

5

simple:

Si el cociente a/b es representable, la expresión (a/b)*b + a%b será igual a a

(estándar C99, 6.5.5/6).

+15

Esto no responde directamente a la pregunta, es meramente una definición axiomática del operador% (y por lo tanto no realmente "simple"). Me pregunto el número de votos para esto. – Clifford

+5

@Clifford: Tal vez porque con una transformación obvia (restar '(a/b) * b' de ambos lados) se convierte en una fórmula para determinar' a% b'? – caf

+4

@caf: Tal vez, pero "simple" hubiera sido presentar la transformación "obvia" en lugar de asumir que el lector posee las habilidades matemáticas (aunque básicas). La capacidad matemática de OP es desconocida; asumir que es obvio puede lucir como presumiendo. – Clifford

37

Haz una división entera seguida de una multiplicación y resta.

#include <stdio.h> 
int main() 
{ 
    int c=8, m=3, result=c-(c/m*m); 
    printf("%d\n", result); 
} 
6

Aquí van:

a % b = a - (b * int(a/b)) 
+3

Esa notación de conversión solo funciona en C++ (no en C, de lo que se trata la pregunta) y es superflua si a y b son enteros. Pero el voto a favor vino de otro lado. –

+0

@JonathanLeffler, ¿pueden explicarme qué no funciona en C. – user674669

+4

@ user674669: en C tendrían que escribir '(int) (a/b)'. La notación tipo-función 'int (a/b)' es específica de C++. –

4

Usted puede simular x % y restando repetidamente y de x y hacer el seguimiento de los resultados. En cada iteración, si el resultado es menor que y, tiene el resto y puede devolverlo.

+2

Esto puede ser lento pero útil si la computadora no tiene capacidades de multiplicación/división. – user674669

+1

Así no funcionan las implementaciones de software real. Una implementación de software real doblaría el segundo operando hasta que otra duplicación lo hiciera mayor que el primero, restara, y luego comenzara dividiendo el segundo operando por dos y restando. – EJP

0

Dividendo/Divisor = Cociente

La fórmula (en Python 3) es a continuación:

Modolus = Divident - dividendo // Divisor * Divisor

Por ejemplo si el dividendo = 5, y el Divisor = 2, entonces

Módulo = 5 - 5 // 2 * 2 que se convierte en 5 - 2 * 2 5 - 4 Recuerde que // tiene h igher precedencia que -, entonces 5 // 2 es evaluado primero.

+0

¿En qué se diferencia de @fbrereto answer? – prasun

+0

Es solo un idioma diferente, le expliqué algunas cosas para que la fórmula sea más clara. Utilicé Python 3. Si tiene acceso a Python 3, tipee. Una vez que lo ejecuta en Python, es fácil hacer lo mismo en su idioma favorito. –

+1

@prasun La singularidad no es un requisito en SO. – EJP

Cuestiones relacionadas