解题思路:

1.一个数组存数字的读法,一个数组存单位的读法,这里不需要个位,将个位置空就行,因为平时也不读 “个” 。


2. 通过输入字符串,让每位字符和 ' 0 ' 做差,来获取每一位的数字。


3. 对于0的读法要着重讨论,像50万,只读wu shi 后面加个 wan,其中零不发音的。而遇到非零数字的上一个数字是零,零数字的单位都不读,就多读一个“ling ”即可,如102,读yi bai ling er。


4.另外要对数字出现的10,是读yi shi 还是读 shi 进行分析。这里列出来所有读shi的可能,就避免了读yi shi 的误读错误。如101234,前两位是读shi wan ,而不是yi shi wan。


5.其他直接读出数和数的对应单位即可。

————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                        

原文链接:https://blog.csdn.net/weixin_43042683/article/details/108932128

注意事项:

参考代码:

#include <stdio.h>
#include <string.h>
int main() {  
    char str[100]; // 假设输入的字符串长度不会超过99个字符(留一个位置给'\0')  
    scanf("%s", str); // 读取字符串,注意这里没有处理空格或特殊字符  
    char a[10][10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};//构建数字拼音列表
    char b[10][10] = {"", "shi", "bai", "qian", "wan", "shi", "bai", "qian", "yi", "shi"};//构建每一位数字的位数读法拼音列表
    int len = strlen(str); // 计算输入数的位数  
    for (int i = 0; i < len; i++) {  
        int flag = str[i] - '0'; // 将字符转换为对应的数字  
        if (flag == 0) { // 处理数字0的特殊情况  
            if (len - i == 5 || len - i == 9) {  //len - i就是从左往右数第几位,当零位于万位或亿位时,要输出wan或yi
                printf("%s ", b[len - i - 1]);  
            }  
            if ((len - i) != 1 && str[i + 1] != '0') {  
                printf("ling ");  //当不是个位且下一位不是0时输出ling
            }  
        } else if ((len == 2 || len == 6 || len == 10) && flag == 1 && i == 0) {  
            // 处理数字1在特定位置时的读法  
            printf("shi ");  //当首位是1且输入数字最大位是十亿或十万或十时,只输出shi不输出yi
        } else { // 其他数字直接读出并加上对应单位  
            printf("%s %s ", a[flag], b[len - i - 1]);  
        }  
    }  
    return 0;  
}



点赞(1)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

菜狗在练 9月前 回复TA
所有题解中最简洁的一个了