九度OJ 1096 日期差值

题目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
****************************************************************/


你可能感兴趣的:(九度OJ,1096)