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 日期差值的主要内容,如果未能解决你的问题,请参考以下文章