输入一个人的出生日期(年月日),将该生日中的年、月、日分别输出。
数据范围:年份满足 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;
}
以上是个人心得,仅供参考哦!