题解 | #日期差值#
日期差值
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单个输入的方式进行输入