#include <iostream> using namespace std; #include<assert.h> class Date { public: Date(int year = 1,int month = 1,int day = 1) :_year(year) ,_month(month) ,_day(day) {} inline int GetMonthDay(int year, int month) { assert(month > 0 && month < 13); static int monthDayArray[13] = { -1, 31, 28, 31, 30, 31, 30, 31, 31, 30,31, 30, 31 }; // 365天 5h + if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 ==0))) { return 29; } else { return monthDayArray[month]; } } bool operator>(const Date& d) { if(_year >d._year) { return true; } else if(_year == d._year) { if(_month >d._month) { return true; } else if(_month == d._month) { return _day>d._day; } return false; } else { return false; } } bool operator==(const Date& d) { return _day == d._day && _month == d._month && _year == d._year; } bool operator!=(const Date& d) { return !((*this) == d); } Date& operator+=(int day) { _day += day; // =不执行,比如下个月28,则就是x月28天 while(_day>GetMonthDay(_year,_month)) { _day -= GetMonthDay(_year, _month); ++_month; if(_month == 13) { _month = 1; ++_year; } } return *this; } //两个年月日相差多少天 int operator-(const Date& d) { Date max = *this; Date min = d; if(min>max) { max = d; min = *this; } int count = 0; while(min!=max) { min += 1; count++; } return count; } private: int _year; int _month; int _day; }; int main() { int year1,month1,day1; // cin>>year1>>month1>>day1; //这个输入过不去 scanf("%4d%2d%2d",&year1,&month1,&day1); int year2,month2,day2; //这个输入过不去 scanf("%4d%2d%2d",&year2,&month2,&day2); // cin>>year2>>month2>>day2; Date d1 = {year1,month1,day1}; Date d2 = {year2,month2,day2}; //有点奇怪,为啥都少一天,在这儿加了个1,就行了 //知道的告诉我原因 cout<< d1-d2+1; return 0; } // 64 位输出请用 printf("%lld")