Maison > développement back-end > C++ > le corps du texte

Comment implémenter une fonction Modulo personnalisée pour les nombres négatifs dans C/C/Obj-C ?

Mary-Kate Olsen
Libérer: 2024-11-04 03:13:02
original
538 Les gens l'ont consulté

How to Implement a Custom Modulo Function for Negative Numbers in C/C  /Obj-C?

Opérateur modulo qui gère les nombres négatifs en C/C /Obj-C

L'opérateur modulo (%) dans les langages basés sur C, lorsqu'il est appliqué à des nombres négatifs, il ne se comporte pas toujours de manière intuitive. En particulier, le résultat peut être négatif, même pour des diviseurs positifs. Ce comportement peut être frustrant, en particulier pour les mathématiciens.

Fonction modulo personnalisée

Pour résoudre ce problème, une fonction modulo personnalisée peut être implémentée pour gérer correctement les nombres négatifs. La fonction suivante utilise le comportement défini par l'implémentation de l'opérateur modulo pour garantir que le résultat est toujours positif :

int mod(int a, int b) {
    if (b < 0) {
        return -mod(-a, -b);
    }

    int ret = a % b;
    if (ret < 0) {
        ret += b;
    }

    return ret;
}
Copier après la connexion

Cette fonction fonctionne en vérifiant d'abord si le diviseur est négatif. Si c'est le cas, la fonction s'appelle récursivement avec la négation du dividende et du diviseur. Cela garantit que le résultat sera positif.

Ensuite, la fonction calcule le reste de la division à l'aide de l'opérateur modulo. Si le reste est négatif, la fonction ajoute le diviseur au reste pour le rendre positif.

Enfin, la fonction renvoie le résultat.

Utilisation

La fonction mod() peut être utilisée à la place de l'opérateur modulo pour obtenir le comportement souhaité pour les nombres négatifs. Par exemple :

int result = mod(-1, 8); // result is 7
result = mod(13, -8); // result is -3
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal