作业比赛编号 : 100000578 - 《算法笔记》3.4小节——入门模拟->日期处理A(Codeup)
题目描述
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出
每组数据输出一行,即日期差值
样例输入
20130101
20130105
样例输出
5
注意: 相邻两天的差值为2; 我一直错误这个,没仔细读题
#include<stdio.h>
bool isLeap(int year)
{
if(year%400==0||(year%100!=0&&year%4==0))
return true;
return false;
}
int month[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}
};
int main()
{
int time[2],t;
int y[2],m[2],d[2];
int days;
while(scanf("%d%d",&time[0],&time[1])!=EOF)
{
days=1; //每次运行都要将天数初始化为1;相邻两天的差值为2,所以要初始化为1
if(time[0]>time[1])
{
t=time[0];
time[0]=time[1];
time[1]=t;
}
for(int i=0;i<2;i++)
{
d[i]=time[i]%100;
m[i]=time[i]/100%100;
y[i]=time[i]/10000;
}
while((y[0]<y[1])||(m[0]<m[1])||(d[0]<d[1]))
{
d[0]++;
if(d[0]==month[m[0]][isLeap(y[0])]+1){ //当天数大于本月的天数时,月m[0]进1,天d[0]初始为1;
m[0]++;
d[0]=1;
}
if(m[0]==13)
{
y[0]++;
m[0]=1;
}
days++;
}
printf("%d\n",days);}
return 0;
}
/**************************************************************
Problem: 1928
User: ********
Language: C++
Result: 正确
Time:22 ms
Memory:1192 kb
****************************************************************/
如果感觉不错,欢迎收藏点赞