Codeup《算法笔记》3.4小节——入门模拟->日期处理

问题 A: 日期差值

[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 32 MB

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

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

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

样例输入 Copy

20130101
20130105

样例输出 Copy

5

#include<cstdio>
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool isLeap(int y){ //判断是否为闰年 
	return ((y%4==0 && y%100!=0)||(y%400==0));
}
int main(){
    int time1,time2;
    int y1,y2,m1,m2,d1,d2;
    while(scanf("%d%d",&time1,&time2)!=EOF){
    	month[2]=28;//设置默认不是闰年
    	if(time1>time2){//若第一个日期更晚,交换
    		int temp=time1;
    		time1=time2;
    		time2=temp;
		}
		y1=time1/10000;
		y2=time2/10000;
		m1=time1%10000/100;
		m2=time2%10000/100;
		d1=time1%100;
		d2=time2%100;
		int res=1;
		if(y1<y2){//计算y1年的剩余天数 
			if(isLeap(y1)){//如果y1是闰年
				month[2]=29; 
			}
			res+=month[m1]-d1;//计算m1月的剩余天数 
			m1++; 
			while(m1<13){ //计算剩余月份的天数 
				res+=month[m1];
				m1++;
			}
			y1++; 
			while(y1<y2){ //若y1依然小于y2,直接加上y1年的天数
				res+=365+isLeap(y1);
				y1++;
			} 
			//计算y2那年1月1日到m2月d2日有多少天 
			if(isLeap(y2)){ //如果y2是闰年 
				month[2]=29;
			}else{
				month[2]=28;
			}
			for(int i=1;i<m2;i++){
				res+=month[i]; 
			}
			res+=d2;
		}else{ //y1==y2
			if(isLeap(y1)){ //如果是闰年 
				month[2]=29;
			}
			if(m1<m2){//不是同月
				res+=(month[m1]-d1);
				m1++;
				while(m1<m2){
					res+=month[m1];
					m1++;
				}
				res+=d2;
			}else{//m1==m2 
				res+=(d2-d1);
			}
		} 
		printf("%d\n",res);
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值