Maison >développement back-end >C++ >Comment convertir efficacement des entiers sous leur forme écrite sans tables de recherche étendues ?

Comment convertir efficacement des entiers sous leur forme écrite sans tables de recherche étendues ?

DDD
DDDoriginal
2025-01-12 20:13:43950parcourir

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

Méthode efficace de conversion d'entier en texte

Question :

Comment convertir efficacement un entier en sa forme littérale ? Par exemple :

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

Devrait afficher "Vingt et Un".

Existe-t-il un moyen de procéder sans recourir à des tables de recherche massives ?

Réponse :

La solution suivante offre une approche pratique :

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

Cette méthode évite d'utiliser de grandes tables de recherche. Au lieu de cela, il divise l’entier en ses différentes parties (milliers, centaines, dizaines, unités) et convertit chaque partie séparément. Il prend en charge des nombres allant jusqu'à des milliards.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn