题解 | #日期差值#
日期差值
https://www.nowcoder.com/practice/ccb7383c76fc48d2bbc27a2a6319631c
注意对于闰年的判断。虽然不知道测试用例里面有没有。
#include <iostream> #include <cstring> #include <algorithm> #include <math.h> #include <stdlib.h> using namespace std; #define N 10 int flag (int year){ if (year %4 == 0 && year % 100 != 0 || year %400 == 0) return 1; else return 0; } int mon[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; int main(){ char str1[N],str2[N]; int count = 0; while (cin >> str1 && cin >> str2){ int i = 0; int year1 = 0,year2 = 0; int mon1 = 0,mon2 = 0; int day1 = 0,day2 = 0; //获得第一个日期 while (str1[i] != '\0'){ if (i <4) year1 = year1 * 10 + (str1[i]-'0'); if (i >= 4 && i < 6) mon1 = mon1 * 10 + (str1[i]-'0'); if (i >= 6) day1 = day1 * 10 + (str1[i]-'0'); i++; } i = 0; //获得第二个日期 while (str2[i] != '\0'){ if (i <4) year2 = year2 * 10 + (str2[i]-'0'); if (i >= 4 && i < 6) mon2 = mon2 * 10 + (str2[i]-'0'); if (i >= 6) day2 = day2 * 10 + (str2[i]-'0'); i++; } int month = 0,day = 0,year = 0; //计算两个年份之间相隔年的天数 year = (year2-year1-1)* 365; //计算相隔月份的天数 for (int j = mon1+1;j <= 12;j++) //第一个日期的月份距离当年12.31的天数 month += mon[j]; for (int j = 1;j < mon2;j++) //第二个日期的月份距离当年12.31的天数 month += mon[j]; day = mon[mon1]-day1+1+ day2; //计算两个日期的天数距离该月的日期的天数 count += year + month + day; //三个数相加,即为普通日期的两个日期之间的差值 //下面对闰年的特殊日期进行判断 //第一年如果是闰年,且日期大于1.1 小于2.29 那么差值+1 if (flag(year1) && mon1 <= 2 && !(mon1 == 2 && day1 == 29)){ count += 1; } //第二年如果是闰年,且日期大于等于2.29,且两个年份不同 那么差值加一(如果两个年份相同,则第一个年份那里加过一次1,就够了) if (flag(year2) && (mon2 >= 3 || (mon2 == 2 && day2 == 29)) && year2 != year1){ count += 1; } cout <<count <<endl; } }