该程序的功能是输入一个不超过9位的整数,以汉语的方式输出。比如:
输入:-123456789
输出:Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu
输入:100800
输出:yi Shi Wan ling ba Bai
下面用C++来实现,参考代码:
#include <cstdio>
#include <cstring>
int main(){
char number[10][5] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
char digit[5][5] = {"Shi", "Bai", "Qian", "Wan", "Yi"};
char integer[15];
gets(integer); //按字符串方式输入数字
int len = strlen(integer); //字符串长度
int left = 0, right = len - 1; //left和right分别指向字符串首尾元素
if(integer[left] == '-') { //如果是负数,则输出“Fu”,并将left右移一位
printf("Fu");
left++;
}
while(left + 4 <= right){
right -= 4; //将right每次左移4位,直到right与left在同一节
}
while(left < len){ //循环每次处理数字的一节,4位或小于4位
bool flag = false; //flag=false表示没有累积的0
bool isPrint = false; //isPrint=false表示该节没有输出过其中的位
while(left <= right){ //从左至右处理数字中某节的每一位
if(left > 0 && integer[left] == '0'){ //如果当前位为0
flag = true;
}else{ //如果当前位不为0
if(flag == true){ //如果存在累积的0
printf(" ling");
flag = false;
}
//只要不是首位,后面的每一位前都要输出空格
if(left > 0)
putchar(' ');
printf("%s", number[integer[left] - '0']); //输出当前位数字
isPrint = true; //isPrint=true表示该节至少有一位被输出
if(left != right){ //某节除了个位外,都需要输出十百千
printf(" %s", digit[right - left - 1]);
}
}
left++; //left右移一位
}
if(isPrint == true && right != len - 1){
printf(" %s", digit[(len - right - 1) / 4 + 2]);
}
right += 4; //right右移4位,输出下一节
}
return 0;
}
注:这里给出的代码默认整数不超过9位,且该代码只是实现了功能,并没有做输入检测,所以并不够健壮。