Fonction modulo et non pas reste... [Résolu]

cs_derf4002 23 Messages postés jeudi 1 mai 2003Date d'inscription 13 janvier 2009 Dernière intervention - 6 févr. 2006 à 23:22 - Dernière réponse : NickJackolson 2 Messages postés jeudi 30 juillet 2009Date d'inscription 3 août 2009 Dernière intervention
- 3 août 2009 à 20:26
Bonjour, je suis étudiant en première année d'IUT Info et je me suis mis ya quelques jour au java (pour le plaisir, dans le cadre des cours on est encore en ADA) et je suis arrivé face à un problème.
Sur tout les site où j'ai pu chercher, il était dit que le modulo était représenté par % or si je ne me trompe pas, le % ne fai que calculer le reste de la division (rem en ada) ce qui donne la meme chose que le modulo (mod en ada) me direz vous, mais en fait non, pas pour les nombres négatifs...
De ce fait quand dans mon algoritme je fais -1%3 (par exemple) il me renvoi -1 or si je suis pas mauvais en math, -1 modulo 3 sa fai 2... Et en effet masupe calculatrice me dis la meme chose :p
Bref voila où est mon problème, donc n'y aurait il pas une véritable fonction modulo et non pas une alternative comme le %, que je puisse l'utliser avec les négatifs ?

Merci d'avance ^^
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
eddyger 20 Messages postés vendredi 3 novembre 2000Date d'inscription 13 décembre 2010 Dernière intervention - 7 févr. 2006 à 07:17
3
Merci
Bonjour,

essaye avec la classe java.math.BigInteger.(http://java.sun.com/j2se/1.4.2/docs/api/java/math/BigInteger.html)

BigInteger b1 = new BigInteger("-1");
BigInteger b3 = new BigInteger("3"); int mod b1.mod(b3).intValue(); // OU BigInteger mod b1.mod(b3);
Cette classe n'a pas de constructeur qui accepte des "int" ou "long" ... mais tu peux faire un truc du genre :
int i1 = -1 ;
int i2 = 3 ;
BigInteger b1 = new BigInteger(new Integer(i1).toString());
BigInteger b3 = new BigInteger(new Integer(i2).toString());
int mod = b1.mod(b3).intValue();
Il y a peut-être plus simple, mais le résultat semble correct.
ed

Merci eddyger 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de eddyger
cs_derf4002 23 Messages postés jeudi 1 mai 2003Date d'inscription 13 janvier 2009 Dernière intervention - 7 févr. 2006 à 09:55
0
Merci
merci beaucoup :D Ca marche nikel ^^ trop content :p Peut etre pas simple, mais efficace, thx :p
Commenter la réponse de cs_derf4002
NickJackolson 2 Messages postés jeudi 30 juillet 2009Date d'inscription 3 août 2009 Dernière intervention - 30 juil. 2009 à 13:05
0
Merci
Bon le topic est vieux mais ça aidera peut être d'autres personnes. Si vous tenez absolument à faire ça avec des int et de manière light, ce code retourne x modulo mod pour des int en entrée :


public int mod(int x,int mod){
int t;
if(x>=0)return x%mod;
else{t=(-x)%mod;
if(t==mod)t=0;
return t;
}
Commenter la réponse de NickJackolson
NickJackolson 2 Messages postés jeudi 30 juillet 2009Date d'inscription 3 août 2009 Dernière intervention - 3 août 2009 à 20:26
0
Merci
Oups une petite erreur dans le code ci dessus, voici la bonne version :

public int modulo(int x,int mod){
int t;
if(x>=0)return x%mod;
else{t=(-x)%mod;
t=mod-t;
if(t==mod)t=0;
return t;
}
}
Commenter la réponse de NickJackolson

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.