描述
Jessi初学英语,为了快速读出一串数字,编写程序将数字转换成英文:
如22:twenty two,123:one hundred and twenty three。
说明:
数字为正整数,长度不超过九位,不考虑小数,转化结果为英文小写;
输出格式为twenty two;
非法数据请返回“error”;
关键字提示:and,billion,million,thousand,hundred。
本题含有多组输入数据。
输入描述:
输入一个long型整数
输出描述:
输出相应的英文写法
示例1
输入:
2356
输出:
two thousand three hundred and fifty six
#include <stdio.h>
char *map1[] = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
char *map2[] = {"", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
void get(unsigned a, int* b)
{
b[0] = (a/1000000)%1000;
b[1] = (a/1000)%1000;
b[2] = a%1000;
}
void print(int a)
{
int flag = 0;
if(a / 100)
{
flag = 1;
printf("%s hundred", map1[a/100]);
}
if(a%100 > 19)
{
if(flag)
{
printf(" and ");
}
printf("%s", map2[(a%100)/10]);
if(a % 10)
{
printf(" %s", map1[a%10]);
}
}
else
{
if(flag)
{
printf(" and ");
}
printf("%s", map1[a%100]);
}
}
int main(void)
{
unsigned num;
int b[3] = {0};
int flag = 0;
while(scanf("%u", &num) != EOF)
{
flag = 0;
memset(b, 0, sizeof(b));
get(num, b);
if(b[0])
{
print(b[0]);
printf(" million");
flag = 1;
}
if(b[1])
{
if(flag)
{
printf(" ");
}
print(b[1]);
printf(" thousand ");
flag = 1;
}
if(b[2])
{
print(b[2]);
}
printf("\n");
}
return 0;
}