codeup1928 日期差值

Posted 杰西啊杰西

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codeup1928 日期差值相关的知识,希望对你有一定的参考价值。

题目描述

有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天

输入描述:
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD

输出描述:
每组数据输出一行,即日期差值

示例1
输入

20110412
20110422

输出

11

代码
这是我自己的理解,参考答案稍后贴出

#include<cstdio>
#include<cmath>

int month_day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

int main()
{
    char date1[9],date2[9];
    scanf("%s%s",date1,date2);
    //转换为数字
    int year1,year2,month1,month2,day1,day2;
    year1=(date1[0]-'0')*1000+(date1[1]-'0')*100+(date1[2]-'0')*10+(date1[3]-'0');
    year2=(date2[0]-'0')*1000+(date2[1]-'0')*100+(date2[2]-'0')*10+(date2[3]-'0');
    month1=(date1[4]-'0')*10+(date1[5]-'0');
    month2=(date2[4]-'0')*10+(date2[5]-'0');
    day1=(date1[6]-'0')*10+(date1[7]-'0');
    day2=(date2[6]-'0')*10+(date2[7]-'0');
    int temp,days=0;;

    if(year1==year2) //如果year1和year2同年,则直接加月份
    {
        if(month1>month2)
        {
            temp=month1;
            month1=month2;
            month2=temp;
            temp=day1;
            day1=day2;
            day2=temp;
        }
        else if(month1==month2)
        {
            days+=abs(day1-day2)+1;
            goto PrintDays;
        }
        //先将剩下的month1天数加完
        days+=month_day[month1]-day1+1;
        for(int i=month1+1;i<month2;i++)
        {
            days+=month_day[i];
        }
        //再加上day2
        days+=day2;
        goto PrintDays;
    }
    if(year1>year2)
    {
        //如果year1>year2将两个日期相交换
        temp=year1;
        year1=year2;
        year2=temp;

        temp=month1;
        month1=month2;
        month2=temp;

        temp=day1;
        day1=day2;
        day2=temp;
    }
    //先将year1剩下的天数加完再其他的
    //把本月剩下的天数加完
    days+=month_day[month1]-day1+1;
    //把本年的剩下月份加完
    for(int i=month1+1;i<=12;i++)
    {
        days+=month_day[i];
    }
    if(year2-year1>1)
    {
        //加上相差的年份
        for(int i=year1+1;i<year2;i++)
        {
            //判断闰年 能被4整除不能被100整除  或能被400整除
            if((i%4==0&&i%100!=0)||i%400==0)
            {
                days+=366;
            }
            else
            {
                days+=365;
            }
        }
    }
    //加上最后一年的月份
    for(int i=1;i<month2;i++)
    {
        days+=month_day[i];
    }
    //加上month2的天数
    days+=day2;
    //如果最后一年是闰年且经过了2月则要days+1
    if((year2%4==0&&year2%100!=0||year2%400==0)&&(month2>2||(month2==2&&day2==29)))
       days++;
PrintDays:
    printf("%d\\n",days);
    return 0;
}

结果
这里由于题目要求规定相邻两天记为2,所以要比普通计算多一天!
在这里插入图片描述
也可以交换日期
在这里插入图片描述

以上是关于codeup1928 日期差值的主要内容,如果未能解决你的问题,请参考以下文章

日期差值

Mysql中使用SQL计算两个日期时间差值

云效Codeup代码评审中的代码协同

日期差值

代码安全无忧—云效Codeup代码加密技术发展之路

1096.日期差值