A1082. Read Number in Chinese (25)
易错点在于对于 ling
的输出和空格的处理
#include <stdio.h>
#include <string.h>
char num[10][5] = {
"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"
};
char wei[5][5] = {
"Shi", "Bai", "Qian", "Wan", "Yi"
};
int main(int argc, const char * argv[]) {
char str[15];
gets(str);
int len = (int)strlen(str);
int left = 0, right = len - 1; // 左右指针
int zeroFlag = 0, printFlag = 0;
if(str[0] == '-'){
printf("Fu");
left++;
}
// left和right指向同一节
while(left + 3 < right)
right -= 4;
while(left < len){
zeroFlag = 0; // 是否需要输出“ling“
printFlag = 0; // 该节是否有输出
while (left <= right) {
if(left > 0 && str[left] == '0'){
zeroFlag = 1;
} else {
if(zeroFlag){
printf(" ling");
zeroFlag = 0;
}
if(left > 0) printf(" ");
printf("%s", num[str[left] - '0']);
printFlag = 1;
// 除个位外,都需要输出位的名称 "Shi" "Bai" "Qian"
if(left != right)
printf(" %s", wei[right - left - 1]);
}
left++;
}
// 输出每一节的名称 “Wan“,“Yi”
if(printFlag && right != len - 1)
printf(" %s", wei[(len - 1 - right) / 4 + 2]);
right += 4;
}
return 0;
}