本题要求编写程序计算某年某月某日是该年中的第几天。
输入格式:
输入在一行中按照格式 “yyyy/mm/dd”(即 “年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被 4 整除但不能被 100 整除、或者能被 400 整除。闰年的 2 月有 29 天。
输出格式:
在一行输出日期是该年中的第几天。
输入样例1:
2009/03/02
输出样例1:
61
输入样例2:
2000/03/02
输出样例2:
62
来源:
来源:PTA | 程序设计类实验辅助教学平台
链接:https://pintia.cn/problem-sets/12/exam/problems/321
提交:
题解:
#include<stdio.h>
/*
* 判断输入的年份是否是闰年:[1]是 [0]不是
*/
int isLeapYear(int year) {
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ? 1 : 0;
}
int main(void) {
char dateString[10];
// 获取输入的日期字符串
for (int i = 0; i < 10; i++) {
dateString[i] = (char) getchar();
}
// 根据输入的日期字符串 yyyy/mm/dd 转换得到年、月、日
int year = (dateString[0] - '0') * 1000 + (dateString[1] - '0') * 100 + (dateString[2] - '0') * 10 + (dateString[3] - '0');
int month = (dateString[5] - '0') * 10 + (dateString[6] - '0');
int day = (dateString[8] - '0') * 10 + (dateString[9] - '0');
// 月份对应天数,闰年 2 月 29 天,平年 2 月 28 天
int daysOfMonth[13] = {0, 31, isLeapYear(year) == 1 ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 统计当前日期是当前年的第几天
int days = 0;
for (int i = 1; i < month; i++) {
days += daysOfMonth[i];
}
days += day;
printf("%d", days);
return 0;
}