【问题标题】:Converting Number into Words将数字转换为单词
【发布时间】:2018-10-26 21:58:39
【问题描述】:

我是 C++ 的初学者,我编写了一个程序,可以将数字打印成 0 到 99 的单词。该程序运行良好,只是 10 到 20 的数字输出错误。

    #include<iostream>
    using namespace std;
    main()
    {
        int number,digit_1,digit_2;
        cout<<"Please enter a number between 0-99: ";
        cin >> number;
        digit_1=number/10;
        digit_2=number%10;
        if(number>=10 && number<=19)
        {
        switch(number)
        {
            case 10: cout<<"Ten"; break;    
            case 11: cout<<"Eleven"; break; 
            case 12: cout<<"Twelve"; break; 
            case 13: cout<<"Thirteen"; break;
            case 14: cout<<"Fourteen"; break;
            case 15: cout<<"Fifteen"; break;
            case 16: cout<<"Sixteen"; break;
            case 17: cout<<"Seventeen"; break;
            case 18: cout<<"Eighteen"; break;
            case 19: cout<<"Nineteen"; break;
        }
        }
        switch(digit_1)
        {
            case 2: cout<<"Twenty"; break;
            case 3: cout<<"Thirty"; break;  
            case 4: cout<<"Forty"; break;   
            case 5: cout<<"Fifty"; break;   
            case 6: cout<<"Sixty"; break;   
            case 7: cout<<"Seventy"; break;
            case 8: cout<<"Eighty"; break;
            case 9: cout<<"Ninety"; break;
        }
            switch(digit_2)
        {
            case 0: cout<<" Zero"; break;
            case 1: cout<<" One"; break;    
            case 2: cout<<" Two"; break;    
            case 3: cout<<" Three"; break;
            case 4: cout<<" Four"; break;
            case 5: cout<<" Five"; break;
            case 6: cout<<" Six"; break;
            case 7: cout<<" Seven"; break;
            case 8: cout<<" Eight"; break;
            case 9: cout<<" Nine"; break;
        }
    }

输出:-

请输入一个介于 0-99 之间的数字:12

十二二

【问题讨论】:

  • 你需要学习“else”语句。
  • 无关:main 必须返回 int。其他任何内容都不符合标准。

标签: c++ numbers word


【解决方案1】:

您在“if”块结束后缺少“else”语句。

如果数字在 10 到 19 之间,你想用第一个开关进入第一个块。

否则,(即数字不在 10 和 19 之间)您想使用最后两个 switch 语句将数字分成数位。

您的问题是,如果现在数字在 10 到 19 之间,则所有三个 switch 语句都将运行。第一个将落在“Twelve”中,第二个将不打印任何内容,因为没有“case 1:”,第三个将打印“Two”。

包围最后两个开关块
else 
{
    switch(digit_1) {
        //...
    }
    switch(digit_2) {
        //...
    }
}

【讨论】:

  • 仍然会遭受像二十零这样的无意义输出。
【解决方案2】:
switch (digit_1) {
    case 1:
        switch (digit_2) {
            case 0: cout << "Ten"; break;
            case 1: cout << "Eleven"; break;
            case 2: cout << "Twelve"; break;
            case 3: cout << "Thirteen"; break;
            case 4: cout << "Fourteen"; break;
            case 5: cout << "Fifteen"; break;
            case 6: cout << "Sixteen"; break;
            case 7: cout << "Seventeen"; break;
            case 8: cout << "Eighteen"; break;
            case 9: cout << "Nineteen"; break;
        }
        break;
    case 2: cout << "Twenty"; break;
    case 3: cout << "Thirty"; break;
    case 4: cout << "Forty"; break;
    case 5: cout << "Fifty"; break;
    case 6: cout << "Sixty"; break;
    case 7: cout << "Seventy"; break;
    case 8: cout << "Eighty"; break;
    case 9: cout << "Ninety"; break;
}
if (digit_1 != 1) {
    if (digit_1) cout << " ";

    switch (digit_2) {
        case 0: if (!digit_1) cout << "Zero"; break;
        case 1: cout << "One"; break;
        case 2: cout << "Two"; break;
        case 3: cout << "Three"; break;
        case 4: cout << "Four"; break;
        case 5: cout << "Five"; break;
        case 6: cout << "Six"; break;
        case 7: cout << "Seven"; break;
        case 8: cout << "Eight"; break;
        case 9: cout << "Nine"; break;
    }
}

【讨论】:

    【解决方案3】:

    在第一次切换状态后,您的程序不会停止执行解决方案:

    using namespace std;
        main()
        {
            int number,digit_1,digit_2;
            cout<<"Please enter a number between 0-99: ";
            cin >> number;
            digit_1=number/10;
            digit_2=number%10;
            if(number>=10 && number<=19)
            {
            switch(number)
            {
                case 10: cout<<"Ten"; return 0;    
                case 11: cout<<"Eleven"; return 0;
                case 12: cout<<"Twelve"; return 0;
                case 13: cout<<"Thirteen"; return 0;
                case 14: cout<<"Fourteen"; return 0;
                case 15: cout<<"Fifteen"; return 0;
                case 16: cout<<"Sixteen"; return 0;
                case 17: cout<<"Seventeen"; return 0;
                case 18: cout<<"Eighteen"; return 0;
                case 19: cout<<"Nineteen"; return 0;
            }
            }
            switch(digit_1)
            {
                case 2: cout<<"Twenty"; break;
                case 3: cout<<"Thirty"; break;  
                case 4: cout<<"Forty"; break;   
                case 5: cout<<"Fifty"; break;   
                case 6: cout<<"Sixty"; break;   
                case 7: cout<<"Seventy"; break;
                case 8: cout<<"Eighty"; break;
                case 9: cout<<"Ninety"; break;
            }
                switch(digit_2)
            {
                case 0: cout<<" Zero"; break;
                case 1: cout<<" One"; break;    
                case 2: cout<<" Two"; break;    
                case 3: cout<<" Three"; break;
                case 4: cout<<" Four"; break;
                case 5: cout<<" Five"; break;
                case 6: cout<<" Six"; break;
                case 7: cout<<" Seven"; break;
                case 8: cout<<" Eight"; break;
                case 9: cout<<" Nine"; break;
            }
        }
    

    using namespace std;
        main()
        {
            int number,digit_1,digit_2;
            cout<<"Please enter a number between 0-99: ";
            cin >> number;
            digit_1=number/10;
            digit_2=number%10;
            if(number>=10 && number<=19)
            {
            switch(number)
            {
                case 10: cout<<"Ten"; break;    
                case 11: cout<<"Eleven"; break; 
                case 12: cout<<"Twelve"; break; 
                case 13: cout<<"Thirteen"; break;
                case 14: cout<<"Fourteen"; break;
                case 15: cout<<"Fifteen"; break;
                case 16: cout<<"Sixteen"; break;
                case 17: cout<<"Seventeen"; break;
                case 18: cout<<"Eighteen"; break;
                case 19: cout<<"Nineteen"; break;
            }
            }
    else {
            switch(digit_1)
            {
                case 2: cout<<"Twenty"; break;
                case 3: cout<<"Thirty"; break;  
                case 4: cout<<"Forty"; break;   
                case 5: cout<<"Fifty"; break;   
                case 6: cout<<"Sixty"; break;   
                case 7: cout<<"Seventy"; break;
                case 8: cout<<"Eighty"; break;
                case 9: cout<<"Ninety"; break;
            }
                switch(digit_2)
            {
                case 0: cout<<" Zero"; break;
                case 1: cout<<" One"; break;    
                case 2: cout<<" Two"; break;    
                case 3: cout<<" Three"; break;
                case 4: cout<<" Four"; break;
                case 5: cout<<" Five"; break;
                case 6: cout<<" Six"; break;
                case 7: cout<<" Seven"; break;
                case 8: cout<<" Eight"; break;
                case 9: cout<<" Nine"; break;
            }
        }
    }
    

    【讨论】:

    • 解决了眼前的问题,但仍然会输出像“二十零”这样的废话
    【解决方案4】:

    我认为结果是对的。12 在 10 和 19 之间,然后 cout "Twelve".digit_1 是 1,但不包括在内。digit_2 是 2,然后 cout "Two"。所以结果是 "Twelve Two" .

    【讨论】:

    • 是的,这是编写的程序的正确输出,但问题应该解释为“我应该如何编写这个程序以获得有意义的输出?”
    猜你喜欢
    • 2017-03-08
    • 2020-04-26
    • 2013-03-13
    • 2013-03-22
    • 1970-01-01
    相关资源
    最近更新 更多