题目1096:日期差值
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:5143
解决:1789
-
题目描述:
-
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天
-
输入:
-
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
-
输出:
-
每组数据输出一行,即日期差值
-
样例输入:
-
20110412
20110422
-
样例输出:
-
11
-
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int months[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int isLeapYear(int y)
{
if((y%4==0&&y%100!=0)||y%400==0)return 1;
return 0;
}
int getdays(int y,int m,int d,int flag)
{
int result=0;
if(isLeapYear(y))
{
months[2]+=1;
int i=1;
while(i<m){
result+=months[i];
i++;
}
result+=d;
months[2]-=1;
if(flag==0)
{
return 366-result+1;
}
else
return result;
}
int i=1;
while(i<m){
result+=months[i];
i++;
}
result+=d;
if(flag==0)
{
return 365-result+1;
}
else
return result;
}
int main(int argc, char *argv[])
{
int y1,m1,d1,y2,m2,d2;
char s1[10];
char s2[10];
char t[10];
while(~scanf("%s%s",s1,s2))
{
strncpy(t,s1,4);
t[4]='\0';
y1=atoi(t);
strncpy(t,s1+4,2);
t[2]='\0';
m1=atoi(t);
strncpy(t,s1+6,2);
t[2]='\0';
d1=atoi(t);
strncpy(t,s2,4);
t[4]='\0';
y2=atoi(t);
strncpy(t,s2+4,2);
t[2]='\0';
m2=atoi(t);
strncpy(t,s2+6,2);
t[2]='\0';
d2=atoi(t);
//printf("%d %d %d ---- %d %d %d\n",y1,m1,d1,y2,m2,d2);
if(y1!=y2)
{
int re=getdays(y1 , m1 , d1 , 0);
for(int i=y1+1;i<y2;++i)
{
if(isLeapYear(i))
re+=366;
else
re+=365;
}
re+=getdays(y2, m2 , d2 ,1);
printf("%d\n",re);
}
else
printf("%d\n",getdays(y2 , m2 , d2 , 1)-getdays(y1 , m1 , d1 , 1)+1);
}
return 0;
}
/**************************************************************
Problem: 1096
User: kirchhoff
Language: C
Result: Accepted
Time:0 ms
Memory:920 kb
****************************************************************/