1082. Read Number in Chinese (25)
Given an integer with no more than 9 digits, you are supposed to read it in the traditional Chinese way. Output "Fu" first if it is negative. For example, -123456789 is read as "Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu". Note: zero ("ling") must be handled correctly according to the Chinese tradition. For example, 100800 is "yi Shi Wan ling ba Bai".
Input Specification:
Each input file contains one test case, which gives an integer with no more than 9 digits.
Output Specification:
For each test case, print in a line the Chinese way of reading the number. The characters are separated by a space and there must be no extra space at the end of the line.
Sample Input 1:-123456789Sample Output 1:
Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiuSample Input 2:
100800Sample Output 2:
yi Shi Wan ling ba Bai
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char unit[9][20]={"","Shi","Bai","Qian","Wan","Shi","Bai","Qian","Yi"};
char name[10][8] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int date[9];
char str[16];
int mask=0x1;
cin >>str;
char *p =str;
int len = strlen(p);
if(*p == '-'){
cout <<"Fu " ;
len--;
p++;
}
int i=len-1;
while(i >=0){
date[len-1-i] = p[i] - '0';
mask = (mask<<1);
if(p[i] != '0')
mask +=1;
i--;
// cout <<hex <<mask <<endl;
};
mask = mask>>1;
bool flag =false;
i = len-1; //max index
cout <<name[date[i]];
if(i)
cout <<' ' <<unit[i];
i--;
if(i < 4)
flag =true;
while(i >=0){
if(date[i] == 0){
while(date[i] == 0 && i>=0)
i--;
if(i < 4 &&((0xf0&mask)>>4) &&!flag){ //indicating wan bit
cout <<" Wan" ;
flag = true;
}
if(i < 0 )
break;
else {
cout <<" ling";
cout <<' ' <<name[date[i]];
if(i)
cout <<' ' <<unit[i];
}
}else{
cout <<' ' <<name[date[i]];
if(i) //if Ge, ignore
cout <<' ' <<unit[i];
if(i == 4)
flag = true;
}
i--;
}
// cout <<'$' <<endl;
return 0;
}