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!
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);
Pas nécessairement le plus efficace, mais l’un des plus courts et des plus lisibles en C++:
std::to_string(num).length()
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);
"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
int intLength(int i) {
int l=0;
for(;i;i/=10) l++;
return l==0 ? 1 : l;
}
Voici un petit efficace
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.
Il y a une bien meilleure façon de le faire
#include<cmath>
...
int size = log10(num) + 1
....
fonctionne pour int et decimal
Étant un nerd en informatique et non un nerd en maths, je le ferais:
char buffer[64];
int len = sprintf(buffer, "%d", theNum);
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
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
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.
*/
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;
}