0
点赞
收藏
分享

微信扫一扫

《算法笔记》-codeup1928日期差值

田妞的读书笔记 2022-04-16 阅读 64
算法

思路:

本次以正常的日期计算,如相邻两个日期只差一天,若要按原题,可对该代码最后答案+1即可。

 闰年的计算思路:

#include<iostream>
#include<algorithm>
using namespace std;
int month[13] = {0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//初始化每个月份的天数 
struct {
	int year, month, day;
}d1,d2; 
int main(){
	int date1,date2; //存储输入的两个日期 
	cin >> date1 >> date2;
	if(date1 > date2) swap(date1, date2);//令date1存储小的日期、date2存储大的日期 
	d1.year = date1/10000; d1.month = date1%10000/100; d1.day = date1%100;//截取对应部分的日期 
	d2.year = date2/10000; d2.month = date2%10000/100; d2.day = date2%100;
	for(int i = 1; i < 13; ++i)
		month[i] += month[i - 1]; // 令每个month[i]表示该月份之前的所有天数,如2月及其之前的所有天数 
	int ans = month[d2.month - 1] + d2.day - month[d1.month-1] - d1.day;//先计算日期2到年头的日期,减去,日期1到年头的日期。 
	if(d1.year % 4 == 0 && d1.year%100 || d1.year % 400 == 0) //如果日期1为闰年且月份大于2了,就是减少了1天 
		if(d1.month > 2) ans--;
	if(d2.year % 4 == 0 && d2.year%100 || d2.year % 400 == 0)//如果日期2为闰年且月份大于2月了,就是加少了1天 
		if(d2.month > 2) ans++;
	//算式 = 两个日期的年份差 + 日期2的闰年数量 - 日期1的闰年数量。 
	ans += month[12] * (d2.year- d1.year) + (d2.year/4 - d2.year/100 + d2.year/400) - (d1.year/4 - d1.year/100 + d1.year/400);
	cout << ans;
	return 0;
}

 

举报

相关推荐

0 条评论