Eine bestimmte Ziffer einer Zahl finden

8

Ich versuche, die n th Ziffer einer Ganzzahl einer beliebigen Länge zu finden. Ich wollte die ganze Zahl in einen String konvertieren und das Zeichen am Index n ... verwenden

char Digit = itoa(Number).at(n);

... Aber dann habe ich festgestellt, dass die itoa -Funktion nicht Standard ist. Gibt es einen anderen Weg, dies zu tun?

    
Maxpm 10.12.2010, 15:55
quelle

9 Antworten

17

(number/intPower(10, n))%10

Definieren Sie einfach die Funktion intPower .

    
Cheers and hth. - Alf 10.12.2010, 15:58
quelle
3

Sie können auch den Operator% und / für eine ganze Zahl in einer Schleife verwenden. (Integer n & gt; = 0, n% 10 gibt die Einheitsziffer an und n / 10 löscht die Einheitsziffer.)

    
Mitch Schwartz 10.12.2010 16:01
quelle
1

Sie können ostringstream verwenden, um in eine Textzeichenfolge zu konvertieren, aber eine Funktion in Übereinstimmung mit:

%Vor%

sollte den Trick mit viel weniger Komplikationen machen. (Zum Anfangs behandelt es den Fall, in dem n größer als die Zahl ist von Ziffern richtig.)

- James Kanze

    
James Kanze 10.12.2010 16:06
quelle
1
m4tx 10.12.2010 15:58
quelle
1

Es ist auch möglich, die Umwandlung in einen String mit der Funktion log10 , int cmath zu vermeiden, die den 10.-Basen-Logarithmus einer Zahl zurückgibt (ungefähr ihre Länge) Wenn es eine Zeichenfolge wäre):

%Vor%

Ich habe es getestet und funktioniert sehr gut (negative Zahlen sind ein Sonderfall). Es muss auch berücksichtigt werden, dass, um das n-te Element zu finden, in der Schleife rückwärts gewandert werden muss, wobei von der gesamten int Länge subtrahiert wird.

Hoffe, das hilft.

    
Baltasarq 10.12.2010 16:25
quelle
1

Eine direkte Antwort ist:

%Vor%

Sie sollten die <math> Bibliothek

einschließen     
unsym 10.12.2010 16:51
quelle
1
%Vor%     
Vincent Mimoun-Prat 10.12.2010 16:02
quelle
0
%Vor%

Unter der Annahme number.at(n) wird eine Dezimalziffer im Bereich 0 ... 9 zurückgegeben, dh.

    
unwind 10.12.2010 15:57
quelle
0

Ein allgemeinerer Ansatz:

%Vor%

Sie können das gleiche für verschiedene Basisnummern (z. B. 16, 32, 64 usw.) tun.

    
Zac Howland 10.12.2010 18:16
quelle

Tags und Links