PTA 翁恺 7-30 念数字

输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:

0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu
 

输入格式:

输入在一行中给出一个整数,如:1234

提示:整数包括负数、零和正数。

输出格式:

在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如 yi er san si

输入样例:

-600
  结尾无空行

输出样例:

fu liu ling ling
  结尾无空行 整体思路: 要将输入的数字一位一位拆开放在数组里,引入一个参数存储位数,再用switch语句与数组内容一一对应即可。负数和正数处理方法是一样的,把负数变成正数,再用一个参数专门控制符号,数组第一个元素与其对应。   整体代码:
#include <stdio.h>
#include <math.h>
int main (void){
    int input = 0;
    scanf ("%d",&input);
    int i = 0,ne = 10,wei = 0;
    int a[100] = {0};
    if (input == 0){
        printf ("ling");
        return 0;
    }
    if (input < 0){
        input = input * -1;
        ne = -1;
    }
    for (i = 0; i < 13; ++i){
        if ((input >= pow(10,i)) && (input < pow(10,i+1)))
            wei = i + 1;
    }
    for (i = 1; i <= wei; ++i){
        a [i] = input / pow(10,wei-i);
        input = input - a[i] * pow(10,wei-i);
    }
    a[0] = ne;
    for (i = 0;i < wei; ++i)
    {
        switch (a[i]){
            case -1:
                printf ("fu ");
                break;
            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;
            case 10:
                break;
        }
    }
    switch (a[wei]){
            case -1:
                printf ("fu");
                break;
            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;
            case 10:
                break;
        }
    return 0;
}

 

讨论:

  • 题目要求末尾不能出现空格,这里的处理方法是将前几位统一输出,末尾带上空格;最后一位单独处理,末尾不带空格,不知有无更好的处理方法。
  • 0作为特殊情况,放在前半部分处理,碰到0输出完直接退出函数
  • 出现case对应时,如果不写break,该case后面的所有case也会一起输出。
  • 拆数字是一段很典型的代码,在很多题目中都能够用到。
上一篇:念数字 pta题目


下一篇:中M2021春C、Java入门练习第I段——变量、表达式、分支、循环