Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Integer Boleh Ditukarkan Dengan Cekap kepada Borang Tertulisnya Tanpa Jadual Carian Yang Luas?

Bagaimanakah Integer Boleh Ditukarkan Dengan Cekap kepada Borang Tertulisnya Tanpa Jadual Carian Yang Luas?

DDD
DDDasal
2025-01-12 20:13:43948semak imbas

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

Kaedah penukaran integer kepada teks yang cekap

Soalan:

Bagaimana untuk menukar integer kepada bentuk literalnya dengan cekap? Contohnya:

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

Sepatutnya mengeluarkan "Twenty One".

Adakah terdapat cara untuk melakukan ini yang tidak bergantung pada jadual carian besar-besaran?

Jawapan:

Penyelesaian berikut menyediakan pendekatan praktikal:

<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>

Kaedah ini mengelakkan penggunaan jadual carian besar. Sebaliknya, ia memecahkan integer kepada bahagian yang berbeza (ribuan, ratusan, puluhan, satu) dan menukar setiap bahagian secara berasingan. Ia menyokong nombor sehingga berbilion.

Atas ialah kandungan terperinci Bagaimanakah Integer Boleh Ditukarkan Dengan Cekap kepada Borang Tertulisnya Tanpa Jadual Carian Yang Luas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn