xjtuer


私信TA

用户名:dotcpp0717904

访问量:20

签 名:

代码,真的很神奇

等  级
排  名 12478
经  验 913
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 西安交通大学
专  业 软件工程

  自我简介:

TA的其他文章

26行解决问题
浏览:13

解题思路:

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分

1 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区

所有题解中最简洁的一个了
2024-03-21 12:06:21
  • «
  • 1
  • »