Compter le nombre de chiffres dans un nombre! [C] - C++ - Programmation
Marsh Posté le 15-10-2002 à 13:38:33
t'as beaucoup de nombres qui commencent par un 0, a part dans des chaines de caractères, toi ?
Marsh Posté le 15-10-2002 à 13:42:17
eh bien c'est pour la vérification d'un code.... et oui il peut commencer par zero
Marsh Posté le 15-10-2002 à 13:44:53
Koybe a écrit a écrit : eh bien c'est pour la vérification d'un code.... et oui il peut commencer par zero |
Ben pas si tu le stocke dans un entier... Et jusqu'a preuve du contraire, diviser une chaine par 10 en C c'est n'importe quoi.
Ton code, il est stocké dans quoi ? parce que si c'est une chaine, y'a qu'a compter le nombre de caractères, non ?
Marsh Posté le 15-10-2002 à 13:47:41
Ce n'est pas une chaine il ne contient que des chiffres :
unsigned long int nombre;
Marsh Posté le 15-10-2002 à 13:52:03
Et il y a pas une autre solution? pour compter le nombre de chiffres?
Marsh Posté le 15-10-2002 à 13:54:16
Koybe a écrit a écrit : Et il y a pas une autre solution? pour compter le nombre de chiffres? |
a partir du moment ou tu considère le code comme un nombre et que tu le place dans un type numérique, tu perds les zeros devant. La solution consiste a ne pas le prendre comme un nombre, mais je sais pas si ca pose des problemes par rapport au reste de ton programme.
Marsh Posté le 15-10-2002 à 13:54:25
Koybe a écrit a écrit : Et il y a pas une autre solution? pour compter le nombre de chiffres? |
int nbreDeChiffre = (int) (1 + log10(nombre)); // tout simplement
Marsh Posté le 15-10-2002 à 14:08:06
j'suis d'ac pour le log c plus simple mais ca ne marchera pas non plus si on commence par zero
Pour la chaine de caractere c'est ok mais je vais devoir verifier qu'on entre rien d'autre que des chiffres lol
Marsh Posté le 15-10-2002 à 14:10:14
Smaragdus a écrit a écrit : int nbreDeChiffre = (int) (1 + log10(nombre)); // tout simplement |
c bien, mais je pense que cette solution peut s'avérer plus gourmande en calcul qu'un simple compteur en faisant des division (éventuellement entière) par 10
faut voir si c appelé bcp et si le code a besoin d'etre otpimisé !
Marsh Posté le 15-10-2002 à 14:13:07
non c'est un bete travail a rendre c'est petit ca fait pas grand chose
Marsh Posté le 15-10-2002 à 14:16:26
BeTtASpLeNdEnS a écrit a écrit : c bien, mais je pense que cette solution peut s'avérer plus gourmande en calcul qu'un simple compteur en faisant des division (éventuellement entière) par 10 faut voir si c appelé bcp et si le code a besoin d'etre otpimisé ! |
entre un appel à la table de log du proco et une boucle avec des divisions et des comparaisons, le choix est vite fait... En plus, le temps de calcul sera toujours le même qqsoit le nombre de chiffres.
Sinon, il faut effectivement faire une vérif pour les nombres negatifs ou egal à zéro.
Marsh Posté le 15-10-2002 à 14:21:43
Et en prendre le log base 10 ca ne serait pas plus simple ?
Marsh Posté le 15-10-2002 à 14:49:07
BENB a écrit a écrit : Et en prendre le log base 10 ca ne serait pas plus simple ? |
grillaid
Marsh Posté le 15-10-2002 à 14:56:27
Smaragdus a écrit a écrit : grillaid |
desolée...
J'ai reagit avant que la page soit totalement chargée (ca rame en ce moment )
Marsh Posté le 16-10-2002 à 00:54:23
Code :
|
Il n'y auras que des chiffres de capturés, sans débordement.
Marsh Posté le 15-10-2002 à 13:36:49
Alors voilà j'ai essayer comme ca :
l=1;
d=10;
while((nombre/d)!=0)
{
l++;
d*=10;
}
-> l me donne bien la taille du nombre... sauf si ce dernier commence par un ou plusieurs zeros! Comment faire dans ce cas?
Merci!