题解 | #日期差值#
日期差值
https://www.nowcoder.com/practice/ccb7383c76fc48d2bbc27a2a6319631c
//王道讲的nextDay做法,很通用。KY_108也能做
#include "stdio.h"
#include "string"
using namespace std;
int monthDay[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
bool leapJudge(int year){
if(year%4 == 0 && year%100 != 0 || year%400 == 0)
return true;//true为闰年
else
return false;
}
int main(){
char buf1[10],buf2[10];
while (scanf("%s%s",buf1,buf2) != EOF){
string date1 = buf1,date2 = buf2;
string date_small = date1<date2?date1:date2;
string date_big = date1>date2?date1:date2;
int day1 = stoi(date_small.substr(6));
int month1 = stoi(date_small.substr(4,2));
int year1 = stoi(date_small.substr(0,4));
int day2 = stoi(date_big.substr(6));
int month2 = stoi(date_big.substr(4,2));
int year2 = stoi(date_big.substr(0,4));
int nextDay = 1;
while (true){
if (day1 == day2 && month1 == month2 && year1 == year2)
break;
nextDay++;
day1++;
bool flag = leapJudge(year1);
if (day1 > monthDay[month1] && month1 != 2){
day1 = 1;
++month1;
} else if (day1 > monthDay[month1] && month1 == 2 && flag == false){
day1 = 1;
++month1;
} else if (day1 > monthDay[month1] && month1 == 2 && flag == true){
if (day1 == 30){
day1 = 1;
++month1;
}
}
if(month1 > 12){
month1 = 1;
++year1;
}
}
printf("%d\n",nextDay);
}
}
