Codeup 1928 日期差值

Codeup 1928 日期差值

题目描述

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

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

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

样例输入:
20130101
20130105

样例输出:
5

具体分析

step 1,设立数组存放不同性质年份的每个月份的天数;
step 2,编写函数判断某年份是否为闰年,是则返回1,不是则返回0,0表示的平年,1表示的闰年;
step 3,输入两个时间,比较两个时间的大小,保证time1大于time2,否则交换。
step 4,对输入的YYYYMMDD格式日期进行分割,分别给出表示年份,月份和天数的变量y,m,d;
step 5,根据判断闰平年的判断增加年份数的同时增加日期差值直至time1-time2=1
step 6,在第一个日期没能达到第二个日期的时候(即,y1 < y2 || m1 < m2 || d1 < d2的时候)循环将第一个日期不断+1,期间注意月份和年份变化;
step 7,用变量sum(因为两个日期是连续的我们规定他们之间的天数为两天故ans初始值为1)统计循环次数即日期差值并打印输出。

注意 在step5中增加年份来增加日期差值时要注意月份,如果是闰年,月份为1或者2(不是2月29)时才增加366否则为365,2月29日时要增加365并将日期变为28

代码

#include <bits/stdc++.h>
using namespace std;
bool isLeaf(int year){
	return(year%4==0&&year%100!=0)||(year%400==0);
}
int main(){
	int sum=1;
	int time1,time2;
	cin>>time1>>time2;
	if(time1<time2){ //将较大值赋给time1 
		int swap=time1;
		time1=time2;
		time2=swap;
	}
    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}};
	int year1,year2,month1,month2,day1,day2;
	//取出年月日 
	year1=time1/10000;
	year2=time2/10000;
	month1=(time1/100)%100;
	month2=(time2/100)%100;
	day1=time1%100;
	day2=time2%100;
	//将time2的年份增加到time1-1的年份 
	while(year1-year2>1){
	   //判断月份是否为闰年的1、2月份(但不是2.29) 
	   if(isLeaf(year2)){
	   	    if(month2==1||month2==2){
	   		    if(day2==29&&month2==2){
       		        day2=28;
		        }
		    else
		        sum=sum+1;
	        }
	   }
	   sum=sum+365;
	   year2++; 
	}
	//逐一增加日期 
	while(year2<year1||month2<month1||day2<day1){
		if(day2==month[month2][isLeaf(year2)]){
			day2=1;
			month2++;
			if(month2==13){
				year2++;
				month2=1;
			}
		}
		else{
		  day2++;
		}
		sum++;
	}
	cout<<sum<<endl; 
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值