2021-03-28


日期差值


题目
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出
每组数据输出一行,即日期差值
样例输入 Copy
20130101
20130105
样例输出 Copy
5
思路
1,判断平年和闰年的每个月的天数
2,判断是否为闰年,闰年能被4整除,不能被
3,判断第一个日期是否晚于第二个日期,如果第一个日期晚于第二个日期,则交换
4,对日期取余,提出年月日,并记录结果
5,第一个日期没有达到第二个日期时进行循环
6,当第一个日期的年数小于第二个日期的年数或者第一个日期的月数小于第二个日期的月数或者第一个日期的天数小于第二个日期的天数时,天数累加,满当月天数时,日期变为下个月的1号,月份满12个月时,日期变为下一年的1月,然后累计。
7,输出结果
代码
#include<stdio.h>
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}};
//判断是平年还是闰年
bool leap(int year)//如果是平年返回1,闰年返回 0。bool函数可以返回两个值
{
return (year%40&&year%100!=0||year%4000);// 闰年是能被4整除且不能被100整除,但可以被400整除
}
int main()
{
int t1,y1,m1,d1;
int t2,y2,m2,d2;
while(scanf("%d%d",&t1,&t2)!=EOF)
{
if(t1>t2)//如果 第一个日期小于第二个日期 ,则交换数据
{
int t3=t1;
t1=t2;
t2=t3;
//swap(t1,t2);
}
y1=t1/10000,m1=t1%10000/100,d1=t1%100;//%是取余数,/是除号不要余数 (求的商)
y2=t2/10000,m2=t2%10000/100,d2=t2%100;
int ans=1; //根据题意,当天也是一天
while(y1<y2||m1<m2||d1<d2)//第一个日期的年小于第二个日期的年或第一个日期的月小于第二个日期的月,或第一个日期的天小于第二个日期的天
{
d1++;// 该月天数加一
if(d1month[m1][leap(y1)]+1)//如果改月的天数满了
{
m1++;//月份加一
d1=1;//更新为每个月的第一天
}
if(m1
13)
{
y1++;
m1=1;
}
ans++;
}
printf("%d\n",ans);
}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值