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
如果是100000005,应该读yi Yi ling wu,注意wan的输出。暂时想到这么多。
代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int main() { char num[11]; scanf("%s",num); int n_size = strlen(num); char digit[10][5] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; char unit[9][5] = {"Fu","Shi","Bai","Qian","Wan","Shi","Bai","Qian","Yi"}; int i = 0,flag = 0,ling = 0; if(num[i] == '-') { flag = 1; printf("%s",unit[i ++]); } while(num[i]) { if(num[i] == '0') { ling ++; if(!i || i != n_size - 1 && num[i + 1] != '0') { if(!flag) { flag = 1; } else putchar(' '); printf("%s",digit[0]); } } else { if(flag) { putchar(' '); } else flag = 1; printf("%s",digit[num[i] - '0']); } if(n_size - i - 1 == 4 && ling != 4)printf(" %s",unit[4]); else if(num[i] != '0' && i != n_size - 1)printf(" %s",unit[n_size - i - 1]); i ++; } }