自己写
只能说写的太繁琐了
class Solution {
public:
bool leap_year(int year){
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) return true;
return false;
}
int month[2][13] = {
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
void get_date(string date, int &year, int &month, int &day){
sscanf(date.c_str(), "%d-%d-%d", &year, &month, &day);
}
int get_num(int y, int m, int d){
return y * 10000 + m * 100 + d;
}
int daysBetweenDates(string date1, string date2) {
int y1, m1, d1, y2, m2, d2;
get_date(date1, y1, m1, d1);
get_date(date2, y2, m2, d2);
if (get_num(y1, m1, d1) > get_num(y2, m2, d2)){
swap(y1, y2);
swap(m1, m2);
swap(d1, d2);
}
int ans = 0;
for (int i = y1 + 1; i < y2; i++)
if (leap_year(i)) ans += 366;
else ans += 365;
if (y1 == y2){
bool leap = leap_year(y1);
if (m1 == m2) ans += d2 - d1;
else{
ans += month[leap][m1] - d1;
for (int i = m1 + 1; i < m2; i++) ans += month[leap][i];
ans += d2;
}
}else{
bool leap = leap_year(y1);
for (int i = 12; i >= m1; i--)
if (i > m1) ans += month[leap][i];
else ans += month[leap][i] - d1;
leap = leap_year(y2);
for (int i = 1; i <= m2; i++){
if (i < m2) ans += month[leap][i];
else ans += d2;
}
}
return ans;
}
};
y总
class Solution {
public:
int daysBetweenDates(string date1, string date2) {
return abs(get_sum(date1) - get_sum(date2));
}
int month[2][13] = {
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
bool leap_year(int year){
return year % 4 == 0 && year % 100 || year % 400 == 0;
}
int get_sum(string date){
int y, m, d;
sscanf(date.c_str(), "%d-%d-%d", &y, &m, &d);
int res = 0;
for (int i = 1971; i < y; i++){
if (leap_year(i)) res += 366;
else res += 365;
}
bool leap = leap_year(y);
for (int i = 1; i < m; i++){
res += month[leap][i];
}
res += d;
return res;
}
};