题目描述
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; }