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:
-123456789
Sample Output 1:
Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu
Sample Input 2:
100800
Sample Output 2:
yi Shi Wan ling ba Bai
//感觉本题可能有很多人会因为自己读得不正确然后做错;而且本题逻辑比较难写
//这里大概能把以下几个测试用例通过应该没啥问题了;当然还要考虑负数
//0 零
//10 一十
//101一百零一
//100001 一十万零一
//10000000 一千万
//100000001 一亿零一
//101000001 一亿零一百万零一
#include <cstdio>
#include <cstring>
#include <cmath>
int main()
{
int N = 0;
char num[12][10] = { "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu", "\0" };
int S[10] = { 0 };
int top = -1;
scanf("%d", &N);
if (!N) printf("ling");//输入为0直接打印了
if (N < 0)//输入为负打印fFu,并取绝对值
{
N = -N;
printf("Fu ");
}
while (N)//把N的各位数字放入栈中
{
S[++top] = N % 10;
N /= 10;
}
int i=0, first = 1, last = 1;
while (top >= 0)//打印出来;这里一定要小心0️⃣的打印!!!
{
if (!S[top])//出现0️⃣之后继续向后扫描再决定要不要输出ling
{
for (i = top; i >= 0 && !S[i] && i != 4; i--);
if ((i+1) % 4 && i!=4) printf(" ling");
if (i < 0) return 0;
top = i;
}
else last = top;//上次非零位置
if (top == 4 && last != 8)
{
if (S[top])
{
if (first) printf("%s Wan", num[S[top]]), first = 0;//控制输出格式
else printf(" %s Wan", num[S[top]]);
}
else printf(" Wan", num[S[top]]);//注意单位首字母是大写,而数字的字母都是小写
}
else if(S[top])
{
if (first) printf("%s", num[S[top]]), first = 0;
else printf(" %s", num[S[top]]);
}
if (top % 4 == 1) printf(" Shi");
if (top % 4 == 2) printf(" Bai");
if (top % 4 == 3) printf(" Qian");
if (top == 8) printf(" Yi");
top--;
}
return 0;
}