#include <stdio.h>
static char base[][10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
static char baseTen[][8] = {"twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
static char unit[][10] = {"", " thousand", " million"};
int main(int argc, char** argv) {
int input, data[3];
while(scanf("%d", &input) != EOF) {
if(input == 0) {
printf("%s", base[0]);
continue;
}
unsigned char flag = 0;
for (int i = 0; i < 3; i++) {
// 通过对1000求余得到后三位数字
// i=0储存个位数,i=1储存千,i=2储存百万
data[i] = input % 1000;
if(data[i]) {
// flag 逻辑或运算便于之后判断是否需要加单位
flag = flag | 0x1 << i;
}
input /= 1000;
}
for(int i = 2; i >= 0; i--) {
if(data[i] / 100) {
// 如果百位不是0
printf("%s hundred", base[data[i] / 100]);
data[i] %= 100;
// 如果十位个位有数字
if(data[i] % 100) {
printf(" and ");
}
}
if(data[i] >= 20) {
printf("%s", baseTen[data[i]/10 - 2]);
data[i] %= 10;
// 如果个位还有数字,预留一个空格
if(data[i]) {
printf(" ");
}
}
if(data[i]) {
printf("%s", base[data[i]]);
}
//如果标记过
if(flag & (0x1 << i)) {
printf("%s", unit[i]);
flag &= ~(0x1 << i);
// 取消标记
// 如果后面还有数字,预留出来空格
if(flag) {
printf(" ");
}
}
}
}
return 0;
}