C语言学习记录(3)念整数

C语言学习记录

前言

一直自己没有学习做笔记的习惯,所以为了加强自己对知识的深入理解,决定将学习笔记写下来,希望向各位大牛们学习交流!

不当之处请斧正!在此感谢!这边就先从学习C语言写起,自己本身对程序语言方面不擅长,所以决定对此从基础开始学习,

大牛们对此文可以忽略!

Mooc上C语言练习

念整数

题目内容:
你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。
如输入1234,则输出:
yi er san si
注意,每个字的拼音之间有一个空格,但是最后的字后面没有空格。当遇到负数时,在输出的开头加上“fu”,如-2341输出为:
fu er san si yi
输入格式:
一个整数,范围是[-100000,100000]。
输出格式:
表示这个整数的每一位数字的汉语拼音,每一位数字的拼音之间以空格分隔,末尾没有空格。
输入样例:
-30
输出样例:
fu san ling
时间限制:500ms内存限制:32000kb

解题:
先分析i的值,注意i等于0时的输出。i为负数时应该如何处理。
分析如何正序的得到i的每个数。
如何确定空格加的时机。
输出比较简单,得到后直接用swith输出。

#include <stdio.h>

int main(int argc, char **argv) {
    int i,x,d,mask=1;
    scanf("%d",&i);
    
    if(i==0)
    {
        printf("ling");
    }else if(i>0)
    {
        x=i;
        while(x>9)
        {
            x/=10;
            mask*=10;
        }
        //printf("%d\n",mask);
        do{
            d=i/mask;
            i%=mask;
            mask/=10;
            switch(d){
            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(mask>0)
            {
                printf(" ");
            }
        }while(mask>0);
    }else
    {
        printf("fu ");
        i = -i;
        x=i;
        while(x>9)
        {
            x/=10;
            mask*=10;
        }
        //printf("%d\n",mask);
        do{
            d=i/mask;
            i%=mask;
            mask/=10;
            switch(d){
            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(mask>0)
            {
                printf(" ");
            }
        }while(mask>0);
    }
    return 0;
}

注意:
1. i等于0时的输出应为一个定值,i小于0时应先转为正整数,同时结果加个"fu"输出。
2. 加空格的条件的变量应为mask。
3. 第二个while循环结束判断条件应为mask变量

你可能感兴趣的:(C语言)