cs_derf4002
Messages postés23Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention13 janvier 2009
-
6 févr. 2006 à 23:22
NickJackolson
Messages postés2Date d'inscriptionjeudi 30 juillet 2009StatutMembreDernière intervention 3 août 2009
-
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 ?
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
NickJackolson
Messages postés2Date d'inscriptionjeudi 30 juillet 2009StatutMembreDernière intervention 3 août 2009 30 juil. 2009 à 13:05
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;
}