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

Signaler
Messages postés
23
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2009
-
Messages postés
2
Date d'inscription
jeudi 30 juillet 2009
Statut
Membre
Dernière intervention
3 août 2009
-
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 ^^
A voir également:

4 réponses

Messages postés
20
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
13 décembre 2010

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
Messages postés
23
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2009

merci beaucoup :D Ca marche nikel ^^ trop content :p Peut etre pas simple, mais efficace, thx :p
Messages postés
2
Date d'inscription
jeudi 30 juillet 2009
Statut
Membre
Dernière intervention
3 août 2009

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;
}
Messages postés
2
Date d'inscription
jeudi 30 juillet 2009
Statut
Membre
Dernière intervention
3 août 2009

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;
}
}