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

思路:

本次以正常的日期计算,如相邻两个日期只差一天,若要按原题,可对该代码最后答案+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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值