题解 | #日期差值#
日期差值
https://www.nowcoder.com/practice/ccb7383c76fc48d2bbc27a2a6319631c
#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int is_leap(int y){ if((y%4==0 && y%100)||y%400==0) return 1; return 0; } int get_month_days(int y,int m){ if(m==2) return months[m]+is_leap(y); return months[m]; } int get_year_days(int y){ return 365+is_leap(y); } char a[9],b[9]; int main() { int y1,m1,d1; int y2,m2,d2; int res,days1=0,days2=0; scanf("%4d%2d%2d",&y1,&m1,&d1); //格式化读入 scanf("%4d%2d%2d",&y2,&m2,&d2); int min_year=min(y1,y2);//不需要从 0000-00-00开始算,直接从较小的一年开始算 for(int i=min_year;i<y1;i++)//计算年差,加上哪一年的天数 days1+=get_year_days(i); for(int i=min_year;i<y2;i++) days2+=get_year_days(i); for(int i=1;i<m1;i++)//计算月差 days1+=get_month_days(y1,i); for(int i=1;i<m2;i++) days2+=get_month_days(y2,i); days1+=d1;//计算日差 days2+=d2; res=abs(days1-days2)+1;//绝对值加一 cout <<res; return 0; }