web-dev-qa-db-fra.com

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 de la 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 dynamique. Des conseils seraient appréciés! Merci!

13
user1888527

Le nombre de chiffres d'un entier n dans une base est obtenu trivialement en divisant jusqu'à ce que vous ayez terminé:

unsigned int number_of_digits = 0;

do {
     ++number_of_digits; 
     n /= base;
} while (n);
23
Kerrek SB

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

std::to_string(num).length()
10
Riot

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

#include <cstdio>

char s[32];

int len = sprintf(s, "%d", i);
9
Paul R

"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

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

Voici un petit efficace

4
Naheel

Formule fermée pour la taille de la 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.

4
lvella

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

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

fonctionne pour int et decimal

2
droid fiji

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

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

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 );
}
2
Sir Alucard

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

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

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

#include<iostream>
    #include<cmath>
    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.
    */
1
Tanim_113

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

int len = ceil(log10(num))+1;
0
suraz negi

Fonction simple et jolie

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