【题目描述】 输入三个整数表示年、月、日,计算从该年的元旦算起到当日是第几天。 如输入 2019-1-1,输出1 【输入输出样例】 输入1: 2019-01-01 输出1: 1 输入2: 2019-3-6 输出2: 65 注意,要考虑闰年2月29天。
时间: 2023-05-27 11:04:37 浏览: 123
【解题思路】 首先需要判断输入的年份是否为闰年,以决定2月份的天数。判断方法为判断该年份是否为4的倍数,但不是100的倍数,或者是400的倍数。之后根据输入的月份和天数,累加每个月的天数即可得到天数总数。需要注意从该年的元旦开始算起而不是1月1日。所以需要先计算1月1日是星期几,再用当日减去1月1日,最终加1即可。
相关问题
C语言 输入三个整数表示年、月、日,计算从该年的元旦算起到当日是第几天。 如输入 2019-1-1,输出1 【输入输出样例】 输入1: 2019-01-01 输出1: 1 输入2: 2019-3-6 输出2: 65 注意,要考虑闰年2月29天。
解法一:
根据闰年的判断条件,能被4整除但不能被100整除,或者能被400整除的年份为闰年。
根据输入的年份计算该年是否是闰年,然后根据月份和闰年与否确定该月份的天数,最后累加计算即可。
时间复杂度:O(1)
C++代码
请你尝试用C语言编写一个程序: 输入三个整数表示年、月、日,计算从该年的元旦算起到当日是第几天。 如输入 2019-1-1,输出1 【输入输出样例】 输入1: 2019-01-01 输出1: 1 输入2: 2019-3-6 输出2: 65 注意,要考虑闰年2月29天。
```c
#include <stdio.h>
// 判断是否为闰年
int isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
int main() {
int year, month, day;
int daysOfMonth[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 每个月的天数
int i, sum = 0;
scanf("%d-%d-%d", &year, &month, &day);
for (i = 1; i < month; i++) {
sum += daysOfMonth[i];
}
sum += day;
if (isLeapYear(year) && month > 2) { // 是闰年且月份大于2月
sum++;
}
printf("%d\n", sum);
return 0;
}
```