首页 > 解决方案 > 如何使用嵌套的 switch 语句将数字转换为 0 - 9999 范围内的单词

问题描述

所以我尝试修改这段代码,最多只能转换数百个

https://github.com/ivanpop/CS-for-Dummies/blob/master/Chapter%205%20Solution%2011/Program.cs

对此

class Program
{
    static void Main(string[] args)
    {
        Console.Write("Enter a number between 0 and 9999: ");
        short number = Convert.ToInt16(Console.ReadLine());

        byte thousandths = (byte)(number / 1000 | 0);
        byte hundreds = (byte)(number / 100 | 0);
        byte tensAndOnes;

        if (number > 99)
        {
            tensAndOnes = (byte)(number % 100);
        }
        else tensAndOnes = (byte)(number * 1);

        byte ones = (byte)(number % 10);

        switch (thousandths)
        {
            case 1: Console.Write("One thousand "); break;
            case 2: Console.Write("Two thousand "); break;
            case 3: Console.Write("Three thousand "); break;
            case 4: Console.Write("Four thousand "); break;
            case 5: Console.Write("Five thousand "); break;
            case 6: Console.Write("Six thousand "); break;
            case 7: Console.Write("Seven thousand "); break;
            case 8: Console.Write("Eight thousand "); break;
            case 9: Console.Write("Nine thousand "); break;
        }

        
        if (thousandths >= 1 && hundreds >= 1) Console.Write(" and ");

        if (hundreds >= 1 && hundreds < 10) Console.Write("One hundred");
        else if (hundreds >= 10 && hundreds < 20) Console.Write("Two hundred");
        else if (hundreds >= 20 && hundreds < 30) Console.Write("Three hundred");
        else if (hundreds >= 30 && hundreds < 40) Console.Write("Four hundred");
        else if (hundreds >= 40 && hundreds < 50) Console.Write("Five hundred");
        else if (hundreds >= 50 && hundreds < 60) Console.Write("Six hundred");
        else if (hundreds >= 60 && hundreds < 70) Console.Write("Seven hundred");
        else if (hundreds >= 70 && hundreds < 80) Console.Write("Eight hundred");
        else if (hundreds >= 80 && hundreds < 90) Console.Write("Nine hundred");
        switch (hundreds)
        {
            case 1: Console.Write("One hundred "); break;
            case 2: Console.Write("Two hundred "); break;
            case 3: Console.Write("Three hundred "); break;
            case 4: Console.Write("Four hundred "); break;
            case 5: Console.Write("Five hundred "); break;
            case 6: Console.Write("Six hundred "); break;
            case 7: Console.Write("Seven hundred "); break;
            case 8: Console.Write("Eight hundred "); break;
            case 9: Console.Write("Nine hundred "); break;
        }

        if (hundreds >= 1 && tensAndOnes >= 1) Console.Write(" ");

        if (tensAndOnes >= 20 && tensAndOnes < 30) Console.Write("Twenty");
        else if (tensAndOnes >= 30 && tensAndOnes < 40) Console.Write("Thirty");
        else if (tensAndOnes >= 40 && tensAndOnes < 50) Console.Write("Fourty");
        else if (tensAndOnes >= 50 && tensAndOnes < 60) Console.Write("Fifty");
        else if (tensAndOnes >= 60 && tensAndOnes < 70) Console.Write("Sixty");
        else if (tensAndOnes >= 70 && tensAndOnes < 80) Console.Write("Seventy");
        else if (tensAndOnes >= 80 && tensAndOnes < 90) Console.Write("Eighty");
        else if (tensAndOnes >= 90 && tensAndOnes < 100) Console.Write("Ninety");

        switch (tensAndOnes)
        {
            case 1: Console.Write("One"); break;
            case 2: Console.Write("Two"); break;
            case 3: Console.Write("Three"); break;
            case 4: Console.Write("Four"); break;
            case 5: Console.Write("Five"); break;
            case 6: Console.Write("Six"); break;
            case 7: Console.Write("Seven"); break;
            case 8: Console.Write("Eight"); break;
            case 9: Console.Write("Nine"); break;
            case 10: Console.Write("Ten"); break;
            case 11: Console.Write("Eleven"); break;
            case 12: Console.Write("Twelve"); break;
            case 13: Console.Write("Thirteen"); break;
            case 14: Console.Write("Fourteen"); break;
            case 15: Console.Write("Fifteen"); break;
            case 16: Console.Write("Sixteen"); break;
            case 17: Console.Write("Seventeen"); break;
            case 18: Console.Write("Eighteen"); break;
            case 19: Console.Write("Nineteen"); break;
        }
        if (tensAndOnes > 20)
        {
            switch (ones)
            {
                case 1: Console.Write("-one"); break;
                case 2: Console.Write("-two"); break;
                case 3: Console.Write("-three"); break;
                case 4: Console.Write("-four"); break;
                case 5: Console.Write("-five"); break;
                case 6: Console.Write("-six"); break;
                case 7: Console.Write("-seven"); break;
                case 8: Console.Write("-eight"); break;
                case 9: Console.Write("-nine"); break;
            }
        }
       if (number == 0) Console.Write("Zero");
        Console.ReadKey();
    }
}

但是当我尝试输入 1100 它输出一千两百而不是一千零一

我必须使用嵌套的 switch 语句,因此不允许使用方法或数组

标签: c#

解决方案


现在您有大于 999 的数字,您需要修改计算百位的方式:

byte hundreds = (byte)((number - (1000 * thousandths)) / 100 | 0);

hundreds当您的输入为“1100”时,这将设置为 1。


推荐阅读