Heim > Backend-Entwicklung > C++ > Wie können Ganzzahlen ohne umfangreiche Nachschlagetabellen effizient in ihre schriftliche Form umgewandelt werden?

Wie können Ganzzahlen ohne umfangreiche Nachschlagetabellen effizient in ihre schriftliche Form umgewandelt werden?

DDD
Freigeben: 2025-01-12 20:13:43
Original
948 Leute haben es durchsucht

How Can Integers Be Efficiently Converted to Their Written Forms Without Extensive Lookup Tables?

Effiziente Methode zur Konvertierung von Ganzzahlen in Text

Frage:

Wie konvertiert man eine Ganzzahl effizient in ihre Literalform? Zum Beispiel:

<code>string 文字形式 = 整数转文字(21);</code>
Nach dem Login kopieren

Sollte „Twenty One“ ausgeben.

Gibt es eine Möglichkeit, dies zu tun, ohne auf umfangreiche Nachschlagetabellen angewiesen zu sein?

Antwort:

Die folgende Lösung bietet einen praktischen Ansatz:

<code class="language-c#">public static class HumanFriendlyInteger
{
    static string[] ones = new string[] { "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine" };
    static string[] teens = new string[] { "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" };
    static string[] tens = new string[] { "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" };
    static string[] thousandsGroups = { "", " Thousand", " Million", " Billion" };

    private static string FriendlyInteger(int n, string leftDigits, int thousands)
    {
        if (n == 0)
        {
            return leftDigits;
        }

        string friendlyInt = leftDigits;

        if (friendlyInt.Length > 0)
        {
            friendlyInt += " ";
        }

        if (n < 100)
        {
            if (n < 20)
            {
                friendlyInt += teens[n - 10];
            }
            else
            {
                friendlyInt += tens[(n / 10) - 2];
                if (n % 10 > 0)
                {
                    friendlyInt += " " + ones[n % 10];
                }
            }
        }
        else
        {
            friendlyInt += ones[n / 100] + " Hundred";
            if (n % 100 > 0)
            {
                friendlyInt += " " + FriendlyInteger(n % 100, "", 0);
            }
        }

        return friendlyInt + thousandsGroups[thousands];
    }

    public static string IntegerToWritten(int n)
    {
        if (n == 0) return "Zero";
        if (n < 0) return "Minus " + IntegerToWritten(-n);

        string result = "";
        int thousands = 0;

        while (n > 0)
        {
            result = FriendlyInteger(n % 1000, result, thousands) + result;
            n /= 1000;
            thousands++;
        }

        return result.Trim();
    }
}</code>
Nach dem Login kopieren

Diese Methode vermeidet die Verwendung großer Nachschlagetabellen. Stattdessen zerlegt es die ganze Zahl in ihre verschiedenen Teile (Tausender, Hunderter, Zehner, Einer) und wandelt jeden Teil separat um. Es unterstützt Zahlen bis zu Milliarden.

Das obige ist der detaillierte Inhalt vonWie können Ganzzahlen ohne umfangreiche Nachschlagetabellen effizient in ihre schriftliche Form umgewandelt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage