题解 | #日期差值#
日期差值
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;
}
}
查看25道真题和解析