计算两个日期之间的天数

问题描述: 

给定两个日期,计算相差的天数。比如2010-1-1和2010-1-3相差2天。
 

时间限制:1000

内存限制:65536

输入

共两行: 第一行包含三个整数startYear,startMonth,startDay,分别是起始年、月、日。 第二行包含三个整数endYear,endMonth,endDay,分别是结束年、月、日。 相邻两个整数之间用单个空格隔开。 年份范围在1~3000。保证日期正确且结束日期不早于起始日期。

输出

输出一个整数,即是两个日期相差的天数。 

输入样例:

2008 1 1

2009 1 1 

 样例输出:

366

AC代码:

#include <iostream>
using namespace std;
int main(){
	int y1,m1,d1,y2,m2,d2;
	int num1[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
	int num2[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
	cin>>y1>>m1>>d1;
	cin>>y2>>m2>>d2;
	int dif,sum=0;
	dif=y2-y1;//求出年份之间的差值 
	
	if(dif>0){//2个日期不是同一年的 
	
		for(int i=1;i<dif;i++){
			if((y1+i)%4==0&&((y1+i)%100!=0||(y1+i)%400==0)) sum+=366;
			else sum+=365;
			//cout<<"test";
		}
		//计算起始年m1月d1日到本年12月31日的天数
		
		if(((y1%4==0&&y1%100!=0)||y1%400==0)){
			for(int i=m1+1;i<=12;i++) sum+=num1[i-1];
			sum+=num1[m1-1]-d1;
		}else{
			for(int i=m1+1;i<=12;i++) sum+=num2[i-1];
			sum+=num2[m1-1]-d1;
		
		}
		
		//计结束年从1月1日到m2月d2日的距离 
		if(((y2%4==0&&y2%100!=0)||y2%400==0)){
			for(int i=1;i<m2;i++) sum+=num1[i-1];
			sum+=d2;
		}else{
			for(int i=1;i<m2;i++) sum+=num2[i-1];
			sum+=d2;
			
		}
	}else{//2个日期是同一年的 
		if(((y1%4==0&&y1%100!=0)||y1%400==0)){
			if(m1==m2){ // 2个日期是同一个月的 
				sum+=d2-d1;
			}else{// 2个日期不是同一个月的 
				for(int i=m1+1;i<=m2-1;i++) sum+=num1[i-1];
				sum+=num1[m1-1]-d1+d2;
			} 
		}else{
			if(m1==m2){ // 2个日期是同一个月的 
				sum+=d2-d1;
			}else{// 2个日期不是同一个月的 
				for(int i=m1+1;i<=m2-1;i++) sum+=num2[i-1];
				sum+=num2[m1-1]-d1+d2;
			} 
		} 
		
	}
	cout<<sum<<endl;
}
/*
2000 1 1
2001 12 31
*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值