用汉语阅读的方式输出数字

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/young2415/article/details/80875713

该程序的功能是输入一个不超过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位,且该代码只是实现了功能,并没有做输入检测,所以并不够健壮。

猜你喜欢

转载自blog.csdn.net/young2415/article/details/80875713