0
点赞
收藏
分享

微信扫一扫

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

参考代码:

#include<cstdio>
#include<cstring>
char num[10][5] ={"ling", "yi", "er", "san", "si", "wu", "liu",
"qi", "ba", "jiu"};
char wei[5][5] ={"Shi", "Bai", "Qian", "Wan", "Yi"};
const int MANX = 15;
char s[MANX];
int main(int argc, char const *argv[])
{
fgets(s, 16, stdin);
int len = strlen(s) - 1;//fgets会多读入一个换行符
int left = 0;
int right = len - 1;

if(s[0] == '-'){
printf("Fu");
left++;
}

while(left + 4 <= right){//让left和right在同一字节,四位为一个字节
right -= 4;
}

int count = 0;
while(left < len){
bool flag = false;//有无累计字节
bool isPrintf = false;//该字节有无输出
while(left <= right){//从左向右输出字节每一位
if(s[left] == '0' && left > 0){//left > 0 是为了当只有一个零的时候,输出零
flag = true;
count++;//统计有无一个字节四个都为零的情况
}else{
if(flag == true ){//如果存在累计零
printf(" ling");
flag = false;
}
if(left > 0) printf(" ");//不是第一位,则输出空格
printf("%s", num[s[left] - '0']);//输出当前位
isPrintf = true;//该节至少有一个被输出
if(right != left){//该节除了个位外,都要输出十百千
printf(" %s", wei[right - left - 1]);
}
}
left++;//右移一位
}
if(isPrintf == true && right != len - 1){//该字节有输出,且只要不是个位,就输出万或者亿
printf(" %s", wei[(len - right - 1) / 4 + 2]);
}
if(count == 4 && s[right + 1] != '0' && right != len - 1){//当上一个字节都为零,该字节第一个不为零时,输出零
printf(" ling");
}
right += 4;
count = 0;
}
printf("\n");
return 0;
}










举报

相关推荐

分而治之 (25 分)

0 条评论