#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;
}
两个日期之间的天数--王道机试
最新推荐文章于 2023-03-31 15:12:12 发布