c++计算两个日期之间的天数差

该博客介绍了如何使用C++计算两个日期之间的天数差。通过预处理将所有日期与原点日期的天数差保存到三维数组中,然后通过数组下标快速获取天数差,避免了复杂计算。程序处理了输入数据,并利用Hash思想优化了内存使用,以全局变量存储避免栈溢出。
摘要由CSDN通过智能技术生成

问题描述:

有两个日期,求两个日期之间的天数,如果两个日期是连续的,
我们规定他们之间的天数为两天。

输入形式为YYYYMMDD,例如:
20110412
20110422

输出为:
11

#include<stdio.h>
#define ISYEAP(x) x%100!=0&&x%4==0||x%400==0?1:0
//定义宏判断是否是闰年,方便计算每月天数
int dayOfMonth[13][2] = {
   
	0,0,
	31,31,
	28,29,
	31,31,
	30,30,
	31,31,
	30,30,
	31,31,
	31,31,
	30,30,
	31,31,
	30,30,
	31,31
};			//存放每月的天数
struct Date {
   
	int Day;
	int Month;
	int Year;
	void nextDay() {
   
		Day++;
		if (Day > dayOfMonth[Month][ISYEAP(Year)]) {
   
			Day = 1;
			Month++;
			if (Month > 12) {
   
				Month = 1;
				Year++;
			}
		}
	}
};
int buf[
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用以下的代码来计算两个日期之间天数(假设日期以整数形式给出,如20210727代表2021年7月27日): ```c++ #include <iostream> using namespace std; int daysBetween(int year1, int month1, int day1, int year2, int month2, int day2) { int days = 0; int monthDays[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; for (int i = year1; i < year2; i++) { if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) { days += 366; } else { days += 365; } } if ((year2 % 4 == 0 && year2 % 100 != 0) || year2 % 400 == 0) { monthDays[2] = 29; } for (int i = 1; i < month1; i++) { days -= monthDays[i]; } days -= day1; for (int i = 1; i < month2; i++) { days += monthDays[i]; } days += day2; return days; } int main() { int year1, month1, day1; int year2, month2, day2; cin >> year1 >> month1 >> day1; cin >> year2 >> month2 >> day2; cout << daysBetween(year1, month1, day1, year2, month2, day2) << endl; return 0; } ``` 在上述代码中,我们定义了一个`daysBetween`函数,该函数接受6个参数:起始日期的年、月、日和结束日期的年、月、日。函数返回起始日期与结束日期之间天数。 函数的实现中,我们首先计算起始日期与结束日期之间的整年天数。对于每一年,我们判断其是否为闰年,并根据是否为闰年来累加该年的天数。然后,我们再计算出起始日期与年底之间天数以及结束日期与年初之间天数,并将它们相加作为结果返回。需要注意的是,我们需要先判断结束日期所在的年份是否为闰年,如果是,将2月份的天数设置为29天。 最后,在`main`函数中,我们读入起始日期和结束日期,并调用`daysBetween`函数计算它们之间天数,并将结果输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值