两个日期之间的天数--王道机试

本文介绍了一种计算两个8位日期之间的天数差的方法,通过构造一个三维数组来存储从初始日期到任意指定日期的天数,并实现了一个日期结构体以辅助计算。文章详细解释了如何初始化该数组及日期结构体的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "iostream"
#include "string"
#include "math.h"
#include "stdio.h"
using namespace std;

/*
	输入两个8位的日期数据,然后输出这两个日期之间天数的差值,
	需要注意的是相邻的两天的时间算是两天。
	用一个数组存放从最开始计时间的日期开始到某个特定日期所经历的天数
	数组Days[5001][13][32]; 
		第一维数的含义是年0~5000
		第二维数的含义是月1~12 
		第三维数的含义是日1~31 
	数组monthAndDay[13][2]存放的是某个月的天数
		第一维数的含义是月1~12
		第二维数的含义是闰年还是平年,0列是平年,1列是闰年
	判断平、闰年的函数
	int isRYear(int x); 
	
	还有一个日期的结构体
		属性:年月日
		方法:nextDay() 
	
	注:需要大内存的数据,定义成全局变量,或者使用malloc的方式初始化
		连续输入一串数据,可以通过scanf("%3d",num)的方式读取指定维数的数据 
*/
int Days[5001][13][32] = {0};
int monthAndDay[13][2] = 
{
	1,1,
	31,31,
	28,29,
	31,31,
	30,30,
	31,31,
	30,30,
	31,31,
	31,31,
	30,30,
	31,31,
	30,30,
	31,31
};

int isRYear(int x)
{
	if(x%100!=0&&x%4==0||x%400==0)
		return 1;
	else
		return 0;
}


//负责的是进行下一步 
typedef struct D
{
	int year;
	int month;
	int day;
	
	void nextDay()
	{
		day++;
		if(day>monthAndDay[month][isRYear(year)])
		{
			day = 1;
			month++;
			if(month>12)
			{
				month = 1;
				year++;
			}
		}
	}
} Date;





int main()
{
	//初始化Days数组	
	Date date;
	int t = 0;//某个日期的天数
	date.year = 0;
	date.month = 1;
	date.day = 1;
 	
 	//初始化Days数组,每往后走一天的情况下Days就对应的是第几天
	//Days主要是记录当前年,月,日情况下是第几天
	//而Date结构体主要是负责自动的按照年月的规定向下走 
	while(date.year<5000)
	{
		t++;
		Days[date.year][date.month][date.day] = t;	
		date.nextDay();	
	} 
	int y = 0,m = 0,d = 0;
	int y1 = 0,m1 = 0,d1 = 0;
	scanf("%4d%2d%2d",&y,&m,&d);
	scanf("%4d%2d%2d",&y1,&m1,&d1);
	cout<<"天数"<<abs(Days[y][m][d]-Days[y1][m1][d1])+1; 
	
	
	return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值