it-swarm.dev

C++ - So ermitteln Sie die Länge einer Ganzzahl

Ich versuche einen Weg zu finden, um die Länge einer Ganzzahl (Anzahl von Ziffern) zu finden und sie dann in ein Ganzzahl-Array zu platzieren. Die Zuweisung erfordert auch, dies ohne die Verwendung von Klassen aus der STL zu tun, obwohl die Programmspezifikation sagt, dass wir "normale C-Bibliotheken" verwenden können. + 1 ist der einfachste Weg, aber ich habe mich gefragt, ob es einen anderen Weg gibt. 

Ah, und das muss nicht mit negativen Zahlen umgehen. Nur nicht negative Zahlen.

Ich versuche, eine Variant-Klasse "MyInt" zu erstellen, die einen größeren Wertebereich unter Verwendung eines dynamischen Arrays verarbeiten kann. Irgendwelche Tipps wären dankbar! Vielen Dank!

13
user1888527

Die Anzahl der Stellen einer ganzen Zahl n in einer beliebigen Basis wird auf einfache Weise durch Teilen erhalten, bis Sie fertig sind:

unsigned int number_of_digits = 0;

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

Nicht unbedingt das effizienteste, aber eines der kürzesten und lesbarsten mit C++:

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

Wenn Sie C-Bibliotheken verwenden können, besteht eine Methode darin, sprintf zu verwenden, z.

#include <cstdio>

char s[32];

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

"Ich meine die Anzahl der Stellen in einer ganzen Zahl, d. H." 123 "hat eine Länge von 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;

ausgänge 3

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

Hier ist eine winzige effiziente

4
Naheel

Geschlossene Formel für die Größe der int:

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

BEARBEITEN:

Für die Anzahl der Dezimalstellen eines Wertes:

ceil(log10(var+1))

Dies funktioniert für Zahlen > 0. Null muss separat geprüft werden.

4
lvella

Es gibt einen viel besseren Weg, dies zu tun 

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

funktioniert für int und decimal

2
droid fiji

Als Computer-Nerd und nicht als Mathematik-Nerd würde ich Folgendes tun:

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

Wie wäre es (funktioniert auch für 0 und Negative):

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

Wäre dies ein effizienter Ansatz? In einen String konvertieren und die length-Eigenschaft finden?

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 zum Finden der Länge von int und dezimal: 

#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

Der beste Weg ist, das Protokoll zu finden, es funktioniert immer

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

Einfache und ziemlich einfache Funktion

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