题解 | #日期差值#

日期差值

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;
	}
	
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务