【第五周作业02念整数】程序设计入门——C语言(翁恺)

念整数(5分)

题目内容:

你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。
如输入1234,则输出:
yi er san si

注意,每个字的拼音之间有一个空格,但是最后的字后面没有空格。当遇到负数时,在输出的开头加上“fu”,如-2341输出为:
fu er san si yi

输入格式:
一个整数,范围是[-100000,100000]。
输出格式
表示这个整数的每一位数字的汉语拼音,每一位数字的拼音之间以空格分隔,末尾没有空格。

输入样例
-30
输出样例
fu san ling

#include 
int main()
{
    int A,x;
    scanf("%d", &x);
    if (x<0)            //小于零,取负且打印“fu ”
    {
        x = -x;
        printf("fu ");
    }

    int mask = 1;
    int t = x;          //不影响到后面do-while循环
    while (t>9)         //计算x对应的位数mask。 eg:12345对应10000
    {
        t /= 10;
        mask *= 10;
    }
    
    do{    
        A = x/mask;
        switch (A)
        {
            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(0):printf("ling");break;
        }
        if (mask>1)     //注意这里是mask,而不是x;
        {
            printf(" ");
        }
        
        x %= mask;
        mask /= 10;
    }while(mask>0);     //注意这里是mask,而不是x;
    return 0;
}

取每个位置上的数,用到下面的算法:

13425/10000 -> 1        //第一位
13425%10000 -> 3425
10000/10 -> 1000
3425/1000 -> 3          //第二位
3425%1000 -> 425
1000/10 -> 100
425/100 -> 4            //第三位
425%100 -> 25
100/10 -> 10
25/10 -> 2              //第四位
25%10 -> 5
10/10 -> 1
5/1 -> 5                //第五位
5%1 -> 0
1/10 ->0

你可能感兴趣的:(【第五周作业02念整数】程序设计入门——C语言(翁恺))