题目描述

Jessi初学英语,为了快速读出一串数字,编写程序将数字转换成英文:
如22:twenty two,123:one hundred and twenty three。
说明:数字为正整数,长度不超过九位,不考虑小数,转化结果为英文小写;
输出格式为twenty two;
非法数据请返回“error”;
关键字提示:and,billion,million,thousand,hundred。本题含有多组输入数据。

哇这道题..累了.. 怎么华为机试这么多这种体力题 靠错误例程修改程序

987(million)654(thousand)321
对于每部分的三位数:3 hundred and 21

eg:num=987654321 写个循环
第一步:num%1000得到末尾3位数321,得到str
第二步,num=num/1000,即987654,继续取余得到654,加单位和上一步得到的str
重复第二步直到num为0。

对于每部分的三个数 函数封装
三位数:整百,百位 hundred and 后两位(调用下面的函数);
两位数:1-9; 10-19; 10的倍数; 其他情况(十位ty+个位)
#include<iostream>
#include<string>
using namespace std;

string table_unit[5]={"","thousand","million"};
string table_num[20]={"","one","two","three","four","five","six","seven","eight","nine",
                     "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen","seventeen", "eighteen", "nineteen"};
string table_muchnum[10]={"","","twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty","ninety" };
string num2(int num){
    string ans;
    if(num<10) return table_num[num];//1.小于10输出
    else if(num>=10&&num<20) return table_num[num];//2.属于10-19范围
    else if(num%10==0)
        return table_muchnum[num/10];//3.是10的整倍数
    else
        return table_muchnum[num/10]+" "+table_num[num%10];//41.其他情况,比如37,记得加空格
}
string num3(int num){
    string ans;
    if(num==0) return "";//1.表示传入为0,不输出内容
    if(num>=100) {//2.大于一百
        ans+=table_num[num/100]+" hundred ";//百分位
        if(num%100!=0)//十分位和个分位不为空追加
            ans+="and "+num2(num%100);}//and在百分位后面,记得空格
    else
        ans=num2(num);//3.传入的为两位数
    return ans;
}

int main(){
    long input;
    string s;
    while(cin>>input){
        if(input==0) cout<<"zero"<<endl;//输入为0
        string ans;
        int k=0;//每三位加一
        while(input){//循环从后开始往前处理,3位一循环
            string temp=num3(input%1000);//后三位得到的字符串
            if(temp.size()!=0)//字符串为空时表示000,不输出,所以不为空时往前追加
                ans=temp+' '+table_unit[k++]+' '+ans;;//字符串+单位+上次循环的字符串,记得空格
            input/=1000;//更新为前面未处理部分,为0时停止循环
        }
        cout<<ans<<endl;//记得回车
    }
    return 0;
}