题目描述如下:
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
我的AC代码是:
#include <cstdio>
#include <cstring>
char trans[10][5] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
char other[4][5] = { "","Shi","Bai","Qian"};
char num[10];
int main() {
int n;
scanf("%d", &n);
bool block = false;//表示需要一个空格
if (n < 0) {
printf("Fu");
n = -n;
block = true;
}
else if (n == 0) {
printf("ling"); return 0;
}
sprintf(num, "%d", n);
int m = strlen(num);
int section = (m - 1) / 4 + 1, contain, info = 0;
bool flag, fullzero;
while (section) {
flag = false;
fullzero = true;
contain = m % 4;
if (contain == 0)contain = 4;
for (int i = 0; i < contain; i++) {
if (num[info + i] == '0') {
flag = true;
}
else {
if (flag)
printf(" ling");
flag = false;
fullzero = false;
if (block)
printf(" %s", trans[num[info + i] - '0']);
else
printf("%s", trans[num[info + i] - '0']);
int k = contain - i - 1;
if (k)printf(" %s", other[k]);
block = true;
}
}
m -= contain;
if (!fullzero) {
switch (section) {
case 3:printf(" Yi"); block = true; break;
case 2:printf(" Wan"); block = true; break;
}
}
section--;
info += contain;
}
return 0;
}
注意几个例子:
800000000 ba Yi
800000008 ba Yi ling ba
808080808 ba Yi ling ba Bai ling ba Wan ling ba Bai ling ba
880808080 ba Yi ba Qian ling ba Shi Wan ba Qian ling ba Shi
80008000 ba Qian Wan ba Qian
0 ling
8 ba