C ++ – comment trouver la longueur d’un entier

J’essaie de trouver un moyen de trouver la longueur d’un entier (nombre de chiffres), puis de le placer dans un tableau d’entiers. La tâche demande également de le faire sans utiliser les classes du STL, bien que la spécification du programme indique que nous pouvons utiliser des “bibliothèques C communes” (je vais demander à mon professeur si je peux utiliser cmath, car je suppose +1 est le moyen le plus simple, mais je me demandais s’il existait un autre moyen).

Ah, et cela ne doit pas gérer les nombres négatifs. Nombres uniquement non négatifs.

J’essaie de créer une variante de classe “MyInt” capable de gérer un plus grand nombre de valeurs à l’aide d’un tableau dynamic. Des conseils seraient appréciés! Merci!

Le nombre de chiffres d’un entier n dans n’importe quelle base est obtenu de manière sortingviale en divisant jusqu’à ce que vous ayez terminé:

 unsigned int number_of_digits = 0; do { ++number_of_digits; n /= base; } while (n); 

Pas nécessairement le plus efficace, mais l’un des plus courts et des plus lisibles en C ++:

 std::to_ssortingng(num).length() 

Si vous pouvez utiliser les bibliothèques C, une méthode consiste à utiliser sprintf , par exemple

 #include  char s[32]; int len = sprintf(s, "%d", i); 

“Je veux dire le nombre de chiffres dans un entier, c’est-à-dire que” 123 “a une longueur de 3”

 int i = 123; // the "length" of 0 is 1: int len = 1; // and for numbers greater than 0: if (i > 0) { // we count how many times it can be divided by 10: // (how many times we can cut off the last digit until we end up with 0) for (len = 0; i > 0; len++) { i = i / 10; } } // and that's our "length": std::cout << len; 

sorties 3

Formule fermée pour la taille de l’ int :

 ceil(8*sizeof(int) * log10(2)) 

MODIFIER:

Pour le nombre de chiffres décimaux d’une certaine valeur:

 ceil(log10(var+1)) 

Cela fonctionne pour les nombres > 0 . Zéro doit être vérifié séparément.

 int intLength(int i) { int l=0; for(;i;i/=10) l++; return l==0 ? 1 : l; } 

Voici un petit efficace

Étant un nerd en informatique et pas un nerd en maths, je le ferais:

 char buffer[64]; int len = sprintf(buffer, "%d", theNum); 

Il y a une bien meilleure façon de le faire

  #include ... int size = log10(num) + 1 .... 

fonctionne pour int et decimal

Que diriez-vous de (ça marche aussi pour 0 et les négatifs):

 int digits( int x ) { return ( (bool) x * (int) log10( abs( x ) ) + 1 ); } 

Serait-ce une approche efficace? Conversion en chaîne et recherche de la propriété length?

 int num = 123 ssortingng strNum = to_ssortingng(num); // 123 becomes "123" int length = strNum.length(); // length = 3 char array[3]; // or whatever you want to do with the length 

Code pour trouver la longueur de int et de nombre décimal:

 #include #include using namespace std; int main() { int len,num; cin >> num; len = log10(num) + 1; cout << len << endl; return 0; } //sample input output /*45566 5 Process returned 0 (0x0) execution time : 3.292 s Press any key to continue. */ 

Le meilleur moyen est de trouver en utilisant le journal, cela fonctionne toujours

 int len = ceil(log10(num))+1; 

Fonction simple et jolie

 int intlen(int i) { int j=1; while(i>10){i=i/10;j++;} return j; }