SAVOIR SI UN NOMBRE EST PAIR OU IMPAIR

Messages postés
1025
Date d'inscription
vendredi 29 août 2003
Statut
Membre
Dernière intervention
28 mars 2005
- - Dernière réponse : cs_dominion
Messages postés
230
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
15 mai 2008
- 11 févr. 2004 à 15:37
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/20002-savoir-si-un-nombre-est-pair-ou-impair

cs_dominion
Messages postés
230
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
15 mai 2008
-
Ben de toute façon un nombre est pair seulement s'il est entier.... Mais à mon avis la méthode modulo est plus rapide (et celle des bits par la même occasion)
cs_dominion
Messages postés
230
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
15 mai 2008
-
Ben de toute façon un nombre est pair seulement s'il est entier.... Mais à mon avis la méthode modulo est plus rapide (et celle des bits par la même occasion)
sitesref
Messages postés
40
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
31 juillet 2004
-
tibur tu l'as fait exprès de mettre 4 fois le même post super long ? ah la la..

en fait il y a une autre méthode pour tester l'imparité

bool EstImpair(int n)
{
bool ret = false;
int b = n/2; // c++ va automatiquement arrondir le résultat
if (b*2 n) ret false;
else ret = true;
return ret;
}

essayez avec un nbr, vous verrez que ça marche. le seul inconvénient est que ma méthode ne marche que pour des entiers...
et voilà...
sitesref
Messages postés
40
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
31 juillet 2004
-
tibur tu l'as fait exprès de mettre 4 fois le même post super long ? ah la la..

en fait il y a une autre méthode pour tester l'imparité

bool EstImpair(int n)
{
bool ret = false;
int b = n/2; // c++ va automatiquement arrondir le résultat
if (b*2 n) ret false;
else ret = true;
return ret;
}

essayez avec un nbr, vous verrez que ça marche. le seul inconvénient est que ma méthode ne marche que pour des entiers...
et voilà...
cs_tibur
Messages postés
101
Date d'inscription
samedi 9 février 2002
Statut
Membre
Dernière intervention
5 mai 2009
-
Ya une methode (un peu) plus rapide :

#include
#include <time.h>

bool impaire(int i){
return i&1; // c'est un ET bit à bit sur le dernier bit de l'entier i
}

bool impaire2(int i){
return i%2;
}

int main(int argc, char**argv){

clock_t start_1, start_2, end_1, end_2;

start_1 = clock();
for(long int i=0; i<100000000; i++)
impaire(2);
end_1 = clock();


start_2 = clock();
for(long int i=0; i<100000000; i++)
impaire2(2);
end_2 = clock();

std::cout <<"elapsed 1 : " << end_1 - start_1 <<std::endl;
std::cout <<"elapsed 2 : " << end_2 - start_2 <<std::endl;

return 0;
}

resultats sur mon vieux 200 Mhz :

elapsed 1 : 856
elapsed 2 : 1057

Bon, d'accord, je fais chier le monde pour une 20 aine de % !
gnarf !

tib