打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
华为机试HJ42:学英语

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

Jessi初学英语,为了快速读出一串数字,编写程序将数字转换成英文:

如22:twenty two,123:one hundred and twenty three。

说明:

数字为正整数,长度不超过九位,不考虑小数,转化结果为英文小写;

输出格式为twenty two;

非法数据请返回“error”;

关键字提示:and,billion,million,thousand,hundred。

本题含有多组输入数据。

输入描述:

输入一个long型整数

输出描述:

输出相应的英文写法

示例:

输入:

2356

输出:

two thousand three hundred and fifty six

解题思路:

建立两个字典,分别记录0-19的单词和十倍数的单词。输入数字后,按照其位数从低到高写判断,0-19就直接返回字典里的单词;20-99就先判断是不是正好的十倍数,分情况返回;100-999也分两个情况,如果不是正好的,则返回X百+English(几十);再往上就是千、百万、十亿,特点就是间隔了1000,比如千,就将数据分为多少个1000和几百几十几,百万就分为多少个百万、多少个千和几百几十几,十亿就以此类推。English函数主要通过递归来实现高位数的分析。

测试代码:

#include <iostream>
#include <string>
#include <vector>

using namespace std;

vector<string> T19={"zero","one","two","three","four",                     "five","six","seven","eight","nine",                    "ten","eleven","twelve","thirteen","fourteen",                    "fifteen","sixteen","seventeen","eighteen","ninteen"}; // 前二十个数
vector<string> Tenmul={"none","ten","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"}; // 十的倍数

string English(int number)
{
    if(number>=0&&number<=19)
    {
        return T19[number];
    }
    if(number>=20&&number<=99)
    {
        if(number%10==0)
        {
            return Tenmul[number/10];
        }
        return Tenmul[number/10]+" "+English(number%10);
    }
    if(number>=100&&number<=999)
    {
        if(number%100==0)
        {
            return T19[number/100]+"  hundred";
        }
        return T19[number/100]+" hundred and "+English(number%100);
    }
    if(number>=1000&&number<=999999)
    {
        if(number%1000==0)
        {
            return English(number/1000)+"  thousand";
        }
        return English(number/1000)+" thousand "+English(number%1000);
    }
    if(number>=1000000&&number<=999999999)
    {
        if(number%1000000==0)
        {
            return English(number/1000000)+"  million";
        }
        return English(number/1000000)+" million "+English(number%1000000/1000)+" thousand "+English(number%1000);
    }
    if(number>=1000000000)
    {
        if(number%1000000000==0)
        {
            return English(number/1000000000)+"  billion";
        }
        return English(number/1000000000)+" billion "+English(number%1000000000/1000000)+" million "+English(number%1000000/1000)+" thousand "+English(number%1000);
    }
    return "error";
}

int main()
{
    int number;
    while(cin>>number)
    {
        cout<<English(number)<<endl;
    }
    return 0;
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
儿童英语ABC Number
英语角——one和first傻傻分不清?数字到底该怎么说?
初三英语系列复习资料 数词、冠词考点集汇,讲解和训练
知道怎样在几分钟里用英语数到十亿吗?
这些基数词和序数词,你不一定全会写哦!
基数词和序数词
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服