Strlen() pour obtenir la longueur d'un nombre?

Signaler
Messages postés
117
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
17 février 2007
-
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
-
est-ce qu'on peut utiliser strlen() pour obtenir la longueur (ou le nombre de chiffres d'un nombre) d'un nombre ?

12 réponses

Messages postés
224
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
18 octobre 2010

ben oui si ton nombre est contenu dans une chaine de caractères. genre:
const char* nbr = "123456789";
strlen(nbr) retournera le nombre de chiffres (9 ici)
Messages postés
172
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2009

tu peux faire un truc du genre :
float test=10.25468f;
char buffer[30];

buffer=ftoa(test);
strlen(buffer);


c degueu mais ca marche ;)
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

int GetLength(int num) {

char* depot[500];
ZeroMemory(depot, sizeof(depot));

wsprintf(depot, "%d", num);
return lstrlen(depot);
}

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008

int GetNumberCaracters(int n)

{

int j=1;

int count=0;

while (n/j) { j*=10; count++;}

if (count ==0) return 1;

return count;

}
Messages postés
117
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
17 février 2007

merci pour vos réponses.
Galmiza, ton système de boucle avec compteur est intéressant.

En fait, mon problème vient du fait que j'utilise la librairie NTL de Victor Shoup (www.shoup.net/ntl
) et des nombres de classes ZZ (classe permettant la gestion des très grands nombres (composés de plusieurs millions de chiffres, par exemple).
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

ça sert à quoi de manipler des nombres ac des millions de chiffres ? quelle utilisation pratique

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
Messages postés
117
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
17 février 2007

ça sert à faire de la cryptographie (systèmes à clefs publiques genre RSA) et de la recherche pure en mathématiques.
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

scelw> Merci de l'info :-)

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2
Salut,

le log en base 10 permet de connaitre le nombre de chiffre d'un nombre




#include 

#include <cmath>

using namespace std;



int main()

{

    for( double i = 1; i < 100000; ++i )

        cout << i << ":" << log10( i ) << endl;

}



Ma participation à la saturation du net:
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2
c'est log10(i)+1

pour avoir le nombre de chiffre du nombre.


Ma participation à la saturation du net:
Messages postés
117
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
17 février 2007

cette méthode est intéressante mais hélas, dans le cas de très grands nombres
(plusieurs millions de chiffres), elle est trop lente : c'est une boucle qui fait un
calcul à chaque tour, soit des millions de calculs avant d'arriver au résultat...
c'est très très lent... :(
j'aurais voulu savoir, en conséquence, si une méthode alternative et plus rapide
pouvait être appliquée : par exemple, récupérer la taille du buffer qui stocke le nombre et en déduire sa longueur donc son nombre de chiffres... voyez-vous ce que je veux
dire?
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2
La boucle n'est là que pour afficher les tests.



une fonction



// entrée : l'entier

// sortie : le nombre de chiffre de l'entier

int GetLength(int num) { return log10(num)+1; }




après la méthode peut être différente selon la librairie que tu utilises

que je ne connais pas.

mais il pourrait proposer un log en base 10 sur les grands nombres,

et peut être même directement l'information que tu souhaites.




Ma participation à la saturation du net: