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
Lepaskan: 2025-01-12 20:13:43
asal
948 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan