Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1436 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [QUIZZ] Calculer la plus petite puissance de 2 superieure a un entier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[QUIZZ] Calculer la plus petite puissance de 2 superieure a un entier

n°757395
cnstrnd
Posté le 09-06-2004 à 03:17:21  profilanswer
 

Un petit quizz pour ceux que ca amuse :
 
Le but est de trouver pour n'importe quel entier la puissance de 2 superieure la plus proche de sorte que :
 
888 -> 1024
512 -> 512
33 -> 64


Message édité par cnstrnd le 09-06-2004 à 03:19:36
mood
Publicité
Posté le 09-06-2004 à 03:17:21  profilanswer
 

n°757399
LeGreg
Posté le 09-06-2004 à 05:24:13  profilanswer
 

edit : merde on est en c++..


Message édité par LeGreg le 09-06-2004 à 05:27:59
n°757468
HelloWorld
Salut tout le monde!
Posté le 09-06-2004 à 09:29:08  profilanswer
 

Une petite bidouille en binaire et ça doit être réglé.
Mais je sais pas si c'est ce que tu cherches ou un algo un peu plus accadémique. Un truc du genre

Code :
  1. unsigned long int num = 888;
  2.     unsigned long int mask = 1 << 31;
  3.     while ( mask > num )
  4.     {
  5.         mask >>= 1;
  6.     }
  7.     mask <<= 1;
  8.     std::cout << "puissance la plus proche de " << num << " = " << mask << "\n";



---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°757475
blackgodde​ss
vive le troll !
Posté le 09-06-2004 à 09:36:46  profilanswer
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. unsigned long nb;
  6. cin >> nb;
  7. unsigned long res=2;
  8. while(res<nb)
  9.  res<<=1;
  10. cout << res << '\n';
  11. }


 
sinon, en essayant de déplier les résultats possibles (32 bits sur un unsigned long, c'est pas énorme)
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. template<unsigned long res>
  4. inline void test(unsigned long nb)
  5. {
  6. if(res<nb)
  7. {
  8.  test< res<<1 >(nb);
  9. }
  10. else
  11. {
  12.  cout << res << '\n';
  13. }
  14. }
  15. int main()
  16. {
  17. unsigned long nb;
  18. cin >> nb;
  19. test<2>(nb);
  20. }


 
qqun pourrait me dire si ma méthode est juste ?


---------------
-( BlackGoddess )-
n°757526
jesus_chri​st
votre nouveau dieu
Posté le 09-06-2004 à 10:13:55  profilanswer
 

avec l'assembleur c'est encore meilleur !
 

Code :
  1. unsigned int smallestGreaterOrEqualPowerOfTwo(unsigned int num)
  2. {
  3.     if !(num & (num-1)) return num;
  4.     __asm
  5.     {
  6.         bsr   eax,   num
  7.         mov   num,   eax
  8.     }
  9.     return (1 << num);
  10. }


 
attention le cas ou num est déjà une puissance de 2 est un cas à part !


Message édité par jesus_christ le 04-05-2005 à 22:05:14

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [QUIZZ] Calculer la plus petite puissance de 2 superieure a un entier

 

Sujets relatifs
Petite vérif sur mon script de session, svp ?juste une petite aide pour une personne qu'un peu programmer
une petite connerie a programmer pr un poteXML et JDOM : afficher les noeuds en entier avec leur fils et attribus
[PHP] Une petite précision sur date()[Java] Problème pour convertir un string en entier [resolu]
Lib pour calculer (et pas dessiner) des splines/Bezierpetit pb de css surement : page qui s'affiche pas tjs en entier
[HTML] Petite aide requise pour mon TPE :)Problème de sélection avec VB pour calculer l'écart type
Plus de sujets relatifs à : [QUIZZ] Calculer la plus petite puissance de 2 superieure a un entier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR