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?
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%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
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.
Tags und Links c#