28 votes

Division et modulus d'entiers à la Python en C

En Python et Ruby, la division des entiers signés est tronquée vers l'infini négatif, et le modulus des entiers signés a le même signe que le second opérande :

>>> (-41) / 3
-14
>>> (-41) % 3
1

Cependant, en C et en Java, la division des entiers signés est tronquée vers 0, et le modulus des entiers signés a le même signe que le premier opérande :

printf("%d\n", (-41) / 3); /* prints "-13" */
printf("%d\n", (-41) % 3); /* prints "-2" */

Quelle est la méthode la plus simple et la plus efficace en C pour effectuer le même type de division et de modulus qu'en Python et Ruby ?

-1voto

Ry4an Points 56453

Il s'enfonce dans le monde peu reluisant des flottants, mais ceux-ci donnent des réponses correctes en Java :

public static int pythonDiv(int a, int b) {
    if (!((a < 0) ^ (b < 0))) {
        return a / b;
    }
    return (int)(Math.floor((double)a/(double)b));
}

public static int pythonMod(int a, int b) {
    return a - b * pythonDiv(a,b);
}

Je ne fais aucune affirmation sur leur efficacité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X