解题思路:
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; }
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复