木落长安rr

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

给你一个按 YYYY-MM-DD 格式表示日期的字符串 date,请你计算并返回该日期是当年的第几天。

通常情况下,我们认为 1 月 1 日是每年的第 1 天,1 月 2 日是每年的第 2 天,依此类推。每个月的天数与现行公元纪年法(格里高利历)一致。

示例1:

输入:date = "2019-01-09"
输出:9

示例2:

输入:date = "2019-02-10"
输出:41

示例3:

输入:date = "2003-03-01"
输出:60

示例4:

输入:date = "2004-03-01"
输出:61

思路:先判断在月份,将当前月份之前的月份天数和加起来,再加上当前月的日期也就是天数,再根绝闰年判断2月份的天数。

月份加和时,可以按照倒序将一年中的月份的天数排列在数组中,找到相应的月份,依次加和,2月份为28天,再根据闰年判断是否加1。

class Solution {
public:
    int calcOfDay(int year,int month,int day){
        int mon[12]={30,31,30,31,31,30,31,30,31,28,31,0};//日期按照倒序从11月份排列,12月份加上当月日期就好
        int res=0;
        for(int i=12-month;i<12;i++)
            res+=mon[i];
        if((month>2)&&((year%4==0&&year%100!=0)||year%400==0))//当月份超过两个月且为闰年时,日期加一
            res++;
        res+=day;
        return res;
    }
    
    int dayOfYear(string date) {
       int year, month, day;
        string years = date.substr(0, 4);
        string months = date.substr(5, 2);
        string days = date.substr(8, 2);
        stringstream ss;
        ss << years;
        ss >> year;
        ss.clear();
        ss << months;
        ss >> month;
        ss.clear();
        ss << days;
        ss >> day;
        int res = calcOfDay(year, month, day);
        return res;
    }
};

 string的substr用法sbustr(int index,int len);从index起始位置截取长度为len的字符串。

posted on 2019-09-15 10:24  木落长安rr  阅读(260)  评论(0编辑  收藏  举报