2017-12-25 30 views
0

Ich weiß, dass Sie das Int in eine Zeichenfolge konvertieren und die Ziffer an Position x mit dem Indexer erhalten können, als ob es ein Char-Array wäre, aber diese Konvertierung wird ein wenig Aufwand, wenn Sie mit mehreren großen Zahlen zu tun haben.Erhalten Sie einzelne Ziffern von einem Int ohne Zeichenfolgen zu verwenden?

Gibt es eine Möglichkeit, eine Ziffer an Position x abzurufen, ohne die Zahl in eine Zeichenfolge umzuwandeln?

EDIT:

Vielen Dank, ich werde die vorgeschlagenen Methoden Benchmark und prüfen, ob es nicht besser ist, als in einen String zu konvertieren. Der Thread bleibt 24 Stunden unbeantwortet, falls jemand bessere Ideen hat.

EDIT 2:

Nach einigen einfachen Tests auf ulong Zahlen, ich habe festgestellt, dass in Strings konvertiert werden und das Extrahieren der Ziffer bis zu 50% langsamer verglichen werden können, um die Methoden unten bereitgestellt werden, sind genehmigt Antwort.

+2

Mathmatisch ist es möglich, aber ich denke, dass wird nicht weniger über Kopf als Konvertieren in Zeichenfolge – sino

+0

Sie könnten verschieben und konvertieren den verschobenen Wert in ein Zeichen. –

+2

@sino: Ich würde definitiv erwarten, dass es weniger Overhead ist, als es in eine Zeichenkette umzuwandeln. Schließlich muss die Umwandlung in eine Zeichenfolge alle die gleichen Operationen ausführen * und * das Zeichenfolgenobjekt konstruieren. Wenn nur eine einzige Ziffer erforderlich ist, kann das OP außerdem stoppen, wenn es diese Ziffer erreicht hat. –

Antwort

2

Man könnte so etwas tun:

int ith_digit(int n, int i) { 
    return (int) (n/pow(10, i)) % 10; 
} 

Wir haben die i-te Ziffer durch die Verringerung der Zahl bis zu einem Punkt kommen, wo diese Ziffer wir in der eigenen Ort, zB wird wollen:

Lassen Sie uns Sagen wir, Sie wollten die dritte Ziffer in 12345, und indem wir sie auf 123 reduzieren (indem wir sie 10 mal dividieren), können wir dann den Rest dieser Zahl durch zehn dividieren, um die letzte Ziffer zu bekommen, die die gewünschte Ziffer ist .

+1

Dies ist die Lösung für das Problem. Wenn Sie mehr erklären, wie das funktioniert, werden Sie wahrscheinlich mehr Stimmen bekommen. –

+0

@JimMischel Ich habe die Erklärung Jim hinzugefügt, danke für die Erinnerung! –

Verwandte Themen