佛山网站建设在哪,手机app官网免费下载,外贸网站设计注意事项,文化产业协会网站源码HJ73 计算日期到天数转换
题目描述#xff1a;
描述 根据输入的日期#xff0c;计算是这一年的第几天。 保证年份为4位数且日期合法。 进阶#xff1a;时间复杂度#xff1a;O(n) #xff0c;空间复杂度#xff1a;O(1) 输入描述#xff1a; 输入一行#xff0c;每行…HJ73 计算日期到天数转换
题目描述
描述 根据输入的日期计算是这一年的第几天。 保证年份为4位数且日期合法。 进阶时间复杂度O(n) 空间复杂度O(1) 输入描述 输入一行每行空格分割分别是年月日
输出描述 输出是这一年的第几天 示例1 输入 2012 12 31
输出 366
示例2 输入 1982 3 4
输出 63
解题思路
要求出日期在当前年份的第几天首先我们要知道月份有大小月之分年份也有平年和闰年的区分我们需要根据输入的数据去判断然后求和。 知识点闰年规则-维基百科 閏年是指該年有366日即較平常年份多出一日 目前使用的格里高利曆闰年规则如下这里的公元为公元后年份公元前置润规则参见后续章节[1]
計算格里高利曆年份是平年還是閏年 1、公元年分非4的倍數為平年。 2、公元年分為4的倍數但非100的倍數为闰年。 3、公元年分為100的倍數但非400的倍數为平年。 4、公元年分為400的倍數為閏年。 每逢閏年2月份有29日平年的2月份為28日。
因此1979年、2018年、2021年為平年1980年、2020年逢4的倍数為閏年1900年逢100的倍数但非400的倍數故為平年。2000年逢400的倍数又為閏年。 因此需要根据输入年份判断当前日期是否为闰年还是平年若为闰年则2月份有29天否则为平年则2月份只有28天 其次当月份大于2时需要判断当前年份是平年还是闰年若为闰年则2月份需要加上29天否则2月份加上28天。 可以用一个数组保存12个月的天数1,3,5,7,8,10,12月有31天4,6,9,11有30天2月份则比较特殊闰年有29天平年有28天。
C实现代码
#include iostream
using namespace std;bool isLeapYear(int year)
{if((year%4000||(year%40year%100!0))) {return true;}return false;
}int main()
{int year,month,day;// 每个月的天数[1,3,5,7,8,10,12]月为31天2月份可能为28平年或29天闰年[4,6,9,11]为30天int daysOfMonth[]{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};while(cin year month day){int sum 0;for(int i 0; i month-1; i){sumsumdaysOfMonth[i];}// 如果是闰年并且月份大于2则在sum基础上多加1再加上日数if(isLeapYear(year) month2) {sumsum1day;} else { sumsumday;}coutsumendl;}return 0;
}