初学c语言之开学第一次打卡

近日开学,忙了好多事,因此隔了好久才写了这篇博客。话少,就直接进入正题了:
数数字问题
这是题目:
输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出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

思路:
1.需要一个判断正负的步骤;
2.需要一个循环来依次分解各位数字;
3.因为是从个位开始分解而读出拼音是从最大位数开始,所以需要数组存储,然后逆向输出。

下面是代码(之前尝试用数组,后来找不出原因,所以第一个用的switch-case):

#include<stdio.h> 

int main()
{
    int num;
    int i=0;
    int number[100];
    scanf("%d",&num);               //读入 

    if(num<0){                      //判断正负 
        printf("fu ");
        num = 0 - num;              //转为正数 
    }

    if(num==0){
        printf("ling");
    }
    for(;num>0;i++){                //存入各位数字 
        number[i] = num % 10;
        num = num / 10;
    }
    for(i--;i>=0;i--){
        int j=number[i];
        switch(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(i!=0){
            printf(" ");
        }   
    }
    return 0;
}

其中switch-case可以改成字符数组,不过还没写完,等日后更新。
个位数统计
题目:
个位数统计(15 分)
给定一个 k 位整数 N=d
​k−1
​​ 10
​k−1
​​ +⋯+d
​1
​​ 10
​1
​​ +d
​0
​​ (0≤d
​i
​​ ≤9, i=0,⋯,k−1, d
​k−1
​​ >0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。

输入格式:
每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。

输出格式:
对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。

输入样例:
100311
输出样例:
0:2
1:3
3:1

写在前面:代码编译正确,但试运行之后发现存在范围限制,读入超出一定位数的数字不能输出正确结果,原因还在找。下面是代码:

#include<stdio.h>

int main()
{
    int N;                                  //需要分解的次数 
    int num[10]={0};                        //各位数字出现的次数 
    int d;                                  //0到9 

    scanf("%d",&N); 
    if(N==0){
        return 0;
    }
    for(;(N>=1);){
        d = N % 10;
        num[d]++;
        N = N / 10;
    } 

    for(d=0;d<10;d++){
        if(num[d]!=0){
            printf("%d:%d\n",d,num[d]);
        }
    }



    return 0;
 } 

最后,最近做题较少,日后会加大练习强度。
文章略潦草,请见谅。

猜你喜欢

转载自blog.csdn.net/Yao_orange/article/details/82632591