题目描述
计算日期差值,要注意闰年。
算法
仿照之前的一题,计算每个日期与1年1月1日的差值,由于相邻两天算两天,答案为两个差值的差值+1
C++ 代码(思路清晰可15min内ac)
#include <bits/stdc++.h>
using namespace std;
int month_day[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
bool run_year(int year){
if(year%4==0 && year%100!=0) return true;
if(year%400==0) return true;
return false;
}
int cal_day(int year,int month,int day){
int ans = 0;
//1.1.1---year.1.1
for(int i=1;i<year;i++){
if(run_year(i)){
ans += 366;
}else{
ans += 365;
}
}
//year.1.1--year.month.1
for(int i=1;i<month;i++){
ans += month_day[i-1];
if(i==2 && run_year(year)){
ans++;
}
}
//year.month.1---year.month.day
ans += day;
return ans;
}
int main(){
int total1 = 0;
int total2 = 0;
int year1,month1,day1;
int year2,month2,day2;
int date1,date2;
while(cin>>date1>>date2){
year1 = date1/10000;
year2 = date2/10000;
day1 = date1%100;
day2 = date2%100;
month1 = (date1/100)%100;
month2 = (date2/100)%100;
total1 = cal_day(year1,month1,day1);
total2 = cal_day(year2,month2,day2);
cout<<abs(total1-total2)+1<<endl;
}
return 0;
}