题解 | #日期差值#

日期差值

https://www.nowcoder.com/practice/ccb7383c76fc48d2bbc27a2a6319631c

#include <algorithm>
#include <climits>
#include <cstdio>
#include <iostream>
using namespace std;
class Date
{
public:
//构造函数
Date(int year=1,int month=1,int day=1)
:_year(year)
,_month(month)
,_day(day)
{}

//获取每个月的天数
static int Getmonth(int year, int month, int day) 
{
    static int GetMonth[13] = { -1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    //判断是不是闰年
    if ((month == 2) && ((year % 400 == 0) || ((year % 100 != 0 && year % 4 == 0)))) 
    {
        return 29;
    }
    return GetMonth[month];
}
//比较是否相等
bool operator==(const Date& d)
{
    return _year==d._year &&_month==d._month && _day==d._day;    
}
//比较是否相等
bool operator!=(const Date& d)
{
    return !(*this==d);   
}
//日期的比较
bool operator<(const Date& d)
{
    if (_year < d._year) 
    {
        return true;
    }    
    else if (_year==d._year && _month < d._month) 
    {
        return true;
    }
    else if (_year==d._year && _month == d._month && _day < d._day) 
    {
        return true;
    }
    return false;
}
//日期的加法
Date& operator+=(int day)
{
    _day+=day;
    while (_day>this->Getmonth( _year,  _month,  _day)) 
    {
        _day-=Getmonth( _year,  _month,  _day);
        ++_month;
        if (_month>12) 
        {
            ++_year;
            _month = 1;
        }
    }
    return *this;
}
//日期之间的差值
int operator-(const Date& d)const
{
    Date max = *this;
    Date min = d;
    if (max < min) 
    {
        min = *this;
        max = d;
    }
    int count=1;
    while (max != min) 
    {
        min+=1;
        ++count;
    }
    return count;
}
private:
int _year;
int _month;
int _day;
};

int main() 
{
    int year1;int month1;int day1;
    int year2;int month2;int day2;
    //cin >> year1 >> month1 >> day1;
    //cin >> year2 >> month2 >> day2;
    
    scanf("%4d%2d%2d",&year1,&month1,&day1);
    scanf("%4d%2d%2d",&year2,&month2,&day2);
    Date A(year1,month1,day1);
    Date B(year2,month2,day2);
    
    int ret=A-B;
    cout<<ret;

    return 0;
}

https://blog.csdn.net/Jason_from_China/article/details/142516352

这里本质就是一个日期类的实现,可以看一下我写的日期类的博客,我这里把需要的代码拷贝一下没有做过多逻辑操作

这里需要注意两个点:

1,输入格式的问题,牛客这里是直接输入一大串连续的数值,所以需要你自己区分开

2,每个人对于日期的差值的理解是不一样的,就像我会认为是22-11就是10天差值,但是牛客会认为差值是11天

3,正规来说需要写一个输入流和输出流,但是我觉得麻烦也不想改太多,所以直接采取scanf单个输入的方式进行输入

全部评论

相关推荐

10-06 12:46
门头沟学院 Java
跨考小白:定时任务启动
点赞 评论 收藏
分享
孤寡孤寡的牛牛很热情:为什么我2本9硕投了很多,都是简历或者挂,难道那个恶心人的测评真的得认真做吗
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务