Wie kann ich die Anzahl von 9s in einer ganzen Zahl finden?

7

Ich habe die folgende Methode, die die Gesamtzahl von 9 in einer ganzen Zahl finden sollte, die Methode wird verwendet, um den Vertragstyp der Angestellten basierend auf der Anzahl von 9 abzurufen. Ich versuchte die folgende Klasse: -

%Vor%

In dem ich versuche zu finden, wie viele 9 sind in der übergebenen Ganzzahl, aber die obige Methode wird immer Null zurückgeben. Irgendeine Idee, was schief geht?

    
john G 18.10.2012, 20:39
quelle

3 Antworten

23

Das kannst du mit ein wenig linq machen:

%Vor%

Aber fügen Sie using System.Linq; zur CS-Datei hinzu.

Ihre Antwort funktioniert nicht, weil Sie in Bytes konvertieren, das Konvertieren der Zahl in Bytes erzeugt kein Byte für jede Ziffer (über @ Servy ) . Wenn Sie also jedes Byte in Ihrem Array zum Console / Debug schreiben würden, würden Sie Ihre Nummer nicht sehen.

Beispiel:

%Vor%

Konsole:

  

57500

Sie können das int jedoch in eine Zeichenkette konvertieren und dann nach jedem Zeichen in der Zeichenkette suchen, wenn es eine Neun ist;

%Vor%     
SynerCoder 18.10.2012 20:42
quelle
20

Eine klassische Lösung ist wie folgt: (Wahrscheinlich ist dies der schnellste Algorithmus um eine Lösung zu finden, es braucht nur O (log n) Zeit.)

%Vor%

Wie funktioniert das? Betrachten Sie ein Beispiel, n = 9943

jetzt ret = 0.

n% 10 = 3, was! = 9

n = n / 10 = 994

n% 10 = 4! = 9

n = 99

n% 10 = 9, also ret = 1

n = 9

n% 10 = 9, also ret = 2

n = 0

    
user586399 18.10.2012 20:44
quelle
2

Versuchen Sie

%Vor%

Da eine Zeichenfolge IEnumerable<char> implementiert, können Sie LINQ direkt auf die Zeichenfolge anwenden, ohne sie zuerst in eine Aufzählung von Zeichen zu konvertieren.

AKTUALISIEREN

Das Konvertieren von uint in ein Byte-Array wird nicht wie erwartet funktionieren, da uint nicht direkt die Dezimalziffern der Zahl speichert. Die Nummer wird als Binärzahl gespeichert, die sich über vier Bytes erstreckt. A unit hat immer vier Bytes, auch wenn Ihre Zahl 9 Dezimalstellen hat.

Sie können die Zahl in eine Zeichenkette umwandeln, um ihre Dezimaldarstellung zu erhalten.

    
Olivier Jacot-Descombes 18.10.2012 20:43
quelle

Tags und Links