pta 念数字(C语言实现)

[题目描述]

输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:
0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu

[解题思路]

需要考虑负整数、正整数和零,之前我都是先计算这个数字的位数,然后在去求解,这次我决定将数字的每一位存储在一个整型数组,然后根据数组元素逆向输出。这里要求输入一个整数,所以我的数组长度是12(其实是有点大了,浪费空间了~)还有注意是否要输出空格哦!

[实现代码]

#include <stdio.h>
#define N 12
int main(){
    int arr[N] = {0};
    int num; scanf("%d", &num);
    if (num == 0) // 整数为0单独输出哦~
        printf("ling\n");
    else{
        if (num < 0){
            printf("fu ");
            num = -num;
        }
        int i = 0;
        while (num > 0){
            arr[i++] = num % 10;
            num /= 10;
        }
        int j;
        for (j=i-1; j>=0; j--){
            switch(arr[j]){
                case 0: printf("ling");break;
                case 1: printf("yi"); break;
                case 2: printf("er"); break;
                case 3: printf("san"); break;
                case 4: printf("si"); break;
                case 5: printf("wu"); break;
                case 6: printf("liu"); break;
                case 7: printf("qi"); break;
                case 8: printf("ba"); break;
                case 9: printf("jiu"); break;
            }
            if (j > 0)
                printf(" ");
        }
    }
    return 0;
}
过了一段时间又写这道题目。使用字符数组而不是switch结构。
#include <stdio.h>
int main(){
    int num;
    int arr[10] = {0};
    int i = 0;
    char table[10][6] = {"ling", "yi", "er", "san", "si",
                         "wu", "liu", "qi", "ba", "jiu"};

    scanf("%d", &num);
    
    if (num < 0){
        num = -num;
        printf("fu ");
    }
    if (0 == num){
        printf("ling");
    }
    while (num > 0){
        arr[i++] = num % 10;
        num /= 10;
    }
    if (i > 0){
        printf("%s", table[arr[--i]]);
    }
    while (i > 0){
        printf(" %s", table[arr[--i]]);
    }
    

    return 0;
}

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