Ce qui est un moyen très efficace de déterminer combien de chiffres il y a dans un entier en C++ ?
Réponses
Trop de publicités?Le moyen le plus simple est de le faire :
log10 est défini dans ou
. Vous auriez besoin de profil cela pour voir si il est plus rapide que n’importe lequel des autres posté ici. Je ne sais pas comment robuste, c’est en ce qui concerne la précision de point flottant. En outre, l’argument n’est pas signé comme le journal et les valeurs négatives ne mélangent pas vraiment.
int digits = 0; while (number != 0) { number /= 10; digits++; }
Remarque: "0" aura 0 chiffres! Si vous avez besoin que 0 apparaisse pour avoir 1 chiffre, utilisez:
int digits = 0; do { number /= 10; digits++; } while (number != 0);
(Merci Kevin Fegan)
Au final, utilisez un profileur pour savoir laquelle de toutes les réponses sera la plus rapide sur votre machine ...
Blague pratique: C'est le moyen le plus efficace (le nombre de chiffres est calculé lors de la compilation):
template <unsigned long long N, size_t base=10>
struct numberlength
{
enum { value = 1 + numberlength<N/base, base>::value };
};
template <size_t base>
struct numberlength<0, base>
{
enum { value = 0 };
};
Peut être utile pour déterminer la largeur requise pour le champ numérique dans la mise en forme, les éléments d'entrée, etc.