前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >华为机试HJ73-计算日期到天数转换

华为机试HJ73-计算日期到天数转换

作者头像
ccf19881030
发布2023-03-07 15:39:08
6510
发布2023-03-07 15:39:08
举报
文章被收录于专栏:ccf19881030的博客

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++实现代码:

代码语言:javascript
复制
#include <iostream>
using namespace std;

bool isLeapYear(int year)
{
	if((year%400==0||(year%4==0&&year%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++)
        {
              sum=sum+daysOfMonth[i];
        }
		// 如果是闰年并且月份大于2,则在sum基础上多加1,再加上日数
        if(isLeapYear(year) && month>2) {
            sum=sum+1+day;
		} else { 
            sum=sum+day;
		}
        cout<<sum<<endl;

    }
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HJ73 计算日期到天数转换
    • 题目描述:
      • 解题思路
        • C++实现代码:
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档