Combien de chiffre la variable int contient -elle?

Combien de chiffre la variable int contient -elle? - C++ - Programmation

Marsh Posté le 30-07-2004 à 03:47:35    

'jour!
Euh alors j'ai une variable  
int a=6541234;
et je voudrais savoir de combien de chiffre il est composé!!!
il me faut un truc vraiment trés simple! sinon compliqué g!!
Merci
 :bounce:  :bounce:  :bounce:


---------------
!jb!
Reply

Marsh Posté le 30-07-2004 à 03:47:35   

Reply

Marsh Posté le 30-07-2004 à 04:08:47    

ca relève de l'algo, pas du C++
 
sinon ... la division entière est ton amie

Reply

Marsh Posté le 30-07-2004 à 04:15:40    

ah merde, j'esperer qu'il y orai une fonction toute faite ou des trucs comme ca...
bouh!!
;-(


---------------
!jb!
Reply

Marsh Posté le 30-07-2004 à 07:20:02    

theShOcKwAvE a écrit :

ca relève de l'algo, pas du C++
 
sinon ... la division entière est ton amie


 
Y'a bcp plus rapide (mais un peu crade) : caster l'int en float/double et récupérer les bits d'exposant avec un masque. et si ça se trouve, il y a une fonction qui fait ça dans la librairie C standard.


Message édité par el muchacho le 30-07-2004 à 07:20:36

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 30-07-2004 à 08:04:36    

log(x)

Reply

Marsh Posté le 30-07-2004 à 08:29:02    

'fectivement.  Le log décimal (de abs(x)), pourquoi n'ya ai-je pas pensé ? :D


Message édité par el muchacho le 30-07-2004 à 08:34:00

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 31-07-2004 à 18:45:14    

el muchacho a écrit :

Y'a bcp plus rapide (mais un peu crade) : caster l'int en float/double et récupérer les bits d'exposant avec un masque. et si ça se trouve, il y a une fonction qui fait ça dans la librairie C standard.


et pourquoi pas en string [:dawa] ?

Reply

Marsh Posté le 09-08-2004 à 17:30:55    

unsigned int a = ...
char buffer[MAX_SIZE]; // MAX_SIZE assez grand
sprintf(buffer, "%d", a);
int longueur_de_a = strlen(buffer);
 
et ça marche pour 0 (1 chiffre)

Reply

Marsh Posté le 09-08-2004 à 17:56:57    

Attends, j'ai le code parfait, qui détermine MAX_SIZE à la bonne taille :

Code :
  1. int a = 6541234;
  2. int max_size;
  3. if ( a == 0 )
  4. {
  5.     max_size = 1;
  6. }
  7. else
  8. {
  9.     max_size = log( abs( a ) ) + 1;
  10. }
  11. char * buffer = malloc( max_size + 1 );
  12. sprintf( buffer, "%d", abs( a ) );
  13. int longueur_de_a = strlen( buffer );
  14. delete( buffer );


:bounce:


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 09-08-2004 à 18:34:08    

Code :
  1. #include <stdio.h>
  2. main()
  3. {
  4. int nb = 6541234;
  5. int nbChiffres = 0;
  6. while(nb%10 != 0)
  7. {
  8.  nbChiffres++;
  9.  nb /= 10;
  10. }
  11. printf("%d", nbChiffres);
  12. }


Non ?

Reply

Marsh Posté le 09-08-2004 à 18:34:08   

Reply

Marsh Posté le 09-08-2004 à 18:35:20    

Enfin c'est vrai que c'est long :)

Reply

Marsh Posté le 10-08-2004 à 22:53:07    

La solution log(abs(x))+1 est longue aussi (c'est pour ça que je n'y ai pas pensé). Le cast en double + masque est plus sioux, mais bcp plus rapide.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 10-08-2004 à 23:03:56    

tu pourrais tester pour voir l'ecart de performance ?

Reply

Marsh Posté le 11-08-2004 à 00:17:57    

Code :
  1. int a=654284;
  2. char buf[16];
  3. sprintf(buf,"%d",a);
  4. nbChiffres=strlen(a);


[:jesorsv]
 
ed: javais pas vu lexemple de jesus  :fou:


Message édité par red faction le 11-08-2004 à 00:23:34
Reply

Marsh Posté le 11-08-2004 à 00:19:15    

l'imporant c'est que le résultat soit correct et assuré, la performance est secondaire.

Reply

Marsh Posté le 11-08-2004 à 23:55:26    

int intnbchiffre(int a){
 int b=log10(abs(a))+1;
 return b;
}

Reply

Marsh Posté le 12-08-2004 à 00:20:32    

Et si a vaut zero?

Reply

Marsh Posté le 12-08-2004 à 00:23:21    

ben alors ca vaut 0... mais bon il suffit de mettre un  
if (a==0){a=1;}

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed