题目
Jessi初学英语,为了快速读出一串数字,编写程序将数字转换成英文:
22
twenty two
123
one hundred and twenty three。
说明:
数字为正整数,长度不超过九位,不考虑小数,转化结果为英文小写;
输出格式为twenty two;
非法数据请返回“error”;
关键字提示:and,billion,million,thousand,hundred。
方法原型:public static String parse(long num)
输入描述:
输入一个long型整数
输出描述:
输出相应的英文写法
输入例子:
2356
输出例子:
two thousand three hundred and fifty six
思路
这个题格式容易出问题,多个空格少个空格什么的。。。。。。。大体上的思路可以用最简单的方法对数字从高位开始判断。。。用long long类型,long类型不够。。。。
一部好的电影就是可以点亮生活!
代码
#include<iostream>
#include<string>
using namespace std;
string unit[10]= {"","one","two","three","four","five","six","seven","eight","nine"};
string decade[10]= {"","","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};
string decade1[10]= {"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};
string translator(long num)
{
string s=("");//初始化空串
if(num/100)
{
s+=unit[num/100];//
s+=" hundred";
}
num%=100;
if(num==0)
{
return s;//如果没有百位
}
//如果不为空则需要加连接词
if(!s.empty())
{
s+=" and ";
}
if(num<10&&num>0)
{
s+=unit[num];
}
else if(num>=10&&num<20)
{
s+=decade1[num%10];
}
else if(num!=0)
{
s+=decade[num/10];
num=num%10;
if(num)
{
s+=" ";
s+=unit[num];
}
}
return s;
}
int main()
{
long long num;
while(cin>>num)
{
if(num < 0)//小于0
{
cout<<"error"<<endl;
//break;
}
else if(num==0)//等于0
{
cout<<"zero"<<endl;
//break;
}
else//合法输入
{
string billion,million,thousand,output;
billion=translator(num/1000000000);
if(!billion.empty())
billion+=" billion ";
num%=1000000000;
million=translator(num/1000000);
if(!million.empty())
million+=" million ";
num%=1000000;
thousand=translator(num/1000);
if(!thousand.empty())
thousand+=" thousand ";
num%=1000;
output=translator(num);
cout<<billion<<million<<thousand<<output<<endl;
}
}
}