C语言-出生日期输入输出

输入一个人的出生日期(年月日),将该生日中的年、月、日分别输出。

数据范围:年份满足 1900≤y≤2020 ,月份满足 1≤m≤12 1≤m≤12  ,日满足 1≤d≤30 1≤d≤30 

输入描述:

输入只有一行,出生日期,包括年月日,年月日之间的数字没有分隔符。

输出描述:

三行,第一行为出生年份,第二行为出生月份,第三行为出生日期。输出时如果月份或天数为1位数,需要在1位数前面补0。

示例1

输入:

20180716 

复制输出:

year=2018
month=07
date=16

这是C语言的一个基础题,有多种写法。这个题目唯一的考点就是将十位省略的0补齐显示出来。最简单的方法只需要七八行代码完成。比如我一开始在这里用了判断语句,结果虽然是对的,但是程序繁杂。下面总结了三种解法可供参考经验:

法一:极简的方法,注释的小知识点,灵活巧用

int main() {
    int year = 0;
    int month = 0;
    int date = 0;
    //年4位,月2位,日2位
    scanf("%4d%2d%2d", &year, &month, &date);

    printf("year=%4d\n", year);
    //当月份为个位数时,根据要求保留两位数,一般默认十位的0省略,因此可手动添加0,一样生效!
    printf("month=%02d\n", month);
    printf("date=%02d\n", date);

    return 0;
}

法二:如果没有考虑到最简方法,分别使用三个if语句执行三个输出条件(不推荐,将简单的程序繁杂化)

int main() {
        int t = 0;
        scanf("%d", &t);
         //将数入的年月日看作一个整体,通过计算分别得到年月日
        int year = t / 10000;
        int month = t % 1000 / 100;
        int date = t % 100;
        if (year>=1900&&year<=2020)
            printf("year=%d\n", year);
        if (month >= 10&&month<=12) 
            printf("month=%d\n", month);
        else if(month>=1&&month<10) 
            //在满足月份是个位数的前提下,手动输出月份前面的0
            printf("month=0%d\n", month);
        if (date >= 10 && date <= 30) 
            printf("date=%d\n", date);
        else if(date>=1&&month<10) 
            //在满足天数是个位数的情况下,手动输出天数前面的0
            printf("date=0%d", date);
        return 0;
    }

法三:使用嵌套if语句,比较直观(没有发一精简,没有法二繁杂)

int main() {
    int t = 0;
    scanf("%d", &t);
    int y = t / 10000;
    int m = t / 100 % 100;
    int d = t % 100;
    if (y >= 1900 && y <= 2020) {
        if (m >= 1 && m <= 12) {
            if (d >= 1 && d <= 30) {
                printf("year=%d\n", y);
                //判断月份是否为个位数,如果满足,则在前面手动添加0
                if (m / 10 == 0) 
                    printf("month=0%d\n", m);
                else 
                    printf("month=%d\n", m);
                //判断天数是否为个位数,如果满足,则在前面手动添加0
                if (d / 10 == 0) 
                    printf("date=0%d\n", d);
                else 
                    printf("date=%d\n", d);
            }
        }
    }
    return 0;
}

以上是个人心得,仅供参考哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值