PAT乙级1002 写出这个数 C语言 最好理解的解法

说在前面:

作为编程小白,拿到一个编程题,如果一时间没有很好的解题思路,可以去尝试把题目分解。

例如哪个地方需要一个读入哪个地方需要一个输出以及如何实现等,在我们手写的过程中就会认清这个题目要考我们的是什么。

我建议新手最好是去动手写一写题目的需求,这样不仅可以帮助我们理清解题思路还可以锻炼我们的编程思维,慢慢从手写→心写。

(不可操之过急,一步一个脚印)

先看题目:

输入样例:1234567890987654321123456789

输出样例:yi san wu 

思路:

1.数值很大不能用常规int每位加和,然后switch。

2.所以采用数组将每一位以字符型读进数组。

3.将数组里每个数由字符型转化为整型并且加和。

4.想办法从高到低读出来。

上程序! 

#include <stdio.h>
#include <string.h>
int main(){
    char a [1000];
    int b [50];
    int i,length, sum = 0,digits,t,orig,j;      //digits位数、orig是sum的替代品
    digits = 0;
    scanf("%[^\n]%*c", a);
    char py[10][10] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};     //拼音数组

    length = strlen(a);
    for(i = 0; i < length; i++){       //求出总和
        sum += (a[i] - '0');
    }
        orig = sum ;        //弄个替代品,便利后续使用

        while (orig > 0) {     //弄清sum是几位数
            orig /= 10;
            digits++;
        }

    for(t = 0; t < digits; t++){        //把和读进另外一个数组里面
        b[t] = sum % 10;
        sum /= 10;
    }

    printf("%s",py[b[t-1]]);        //为符合格式先倒序输出第一位再循环按格式打印其他位数
    for(i = t-2; i >= 0; i--)
        printf(" %s",py[b[i]]);

    return 0;
}

最初我的输入采用了gets,但是由于gets比较危险所以我就用了一个scanf的方法,

作为gets的替代方法大家可以自行百度一下,在这里就不详细讲解了。

(附上通过截图)

有问题可以评论区留言~


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