class Solution {
bool leap_year(int year){
return year%400==0||(year%100!=0&&year%4==0);
} //判断是不是闰年
int date_to_int(string date){
int year,month,day;
sscanf(date.c_str(),"%d-%d-%d",&year,&month,&day); //利用sscanf从字符串格式化写入到整型中
int ans=0;
int month_length[]={31,31,28,31,30,31,30,31,31,30,31,30}; //提前存好每个月的日期数,尤其注意,第0个为12月份的日期数,相当于把12放到了年初
while(year!=1971 or month!=1 or day!=1){ //核心思路,就是和1971年1月1日比较,计算出相差多少天
++ans;
if(--day==0){ //日期递减,到0该减月份了
if(--month==0){ //月份递减,到0该减年份了
--year; //年份递减,由while循环控制
}
}
if(day==0){
day=month_length[month]; //由于月份提前--过了,所以直接提取当前月的日期数,如果说是12月,则现在month为0
if(month==2&&leap_year(year)){ //不仅要判断闰年,还要判断是2月
++day;
}
}
if(month==0){
month=12; //修正月份,变为12月的目的是,下一次--month得到的是11月,就恢复正常顺序了
}
}
return ans; //别忘了要返回值
}
public:
int daysBetweenDates(string date1, string date2) {
return abs(date_to_int(date2)-date_to_int(date1)); //因为题中没说谁先谁后,所以说用abs求绝对值
}
};
1360. 日期之间隔几天
最新推荐文章于 2024-07-25 22:05:33 发布