描述
给定两个日期,计算相差的天数。比如2010-1-1和2010-1-3相差2天。
输入
共两行:
第一行包含三个整数startYear,startMonth,startDay,分别是起始年、月、日。
第二行包含三个整数endYear,endMonth,endDay,分别是结束年、月、日。
相邻两个整数之间用单个空格隔开。
年份范围在1~3000。保证日期正确且结束日期不早于起始日期。
输出
输出一个整数,即是两个日期相差的天数。
样例输入
2008 1 1
2009 1 1
样例输出
366
提示
闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。闰年的2月份有29天。
解题
判断闰年以及得到每月的天数即可
代码
#include <iostream>
using namespace std;
bool pd(int i) {//判断闰年
if(((i%4==0)&&(i%100!=0))||(i%400==0)){
return true;
}
return false;
}
int days(int m, int y){//得到天数,m:月,y:年
if(m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12){
return 31;
} else if (m == 2){
return pd(y)?29:28;
}else{
return 30;
}
}
int main(){
int startYear,startMonth,startDay,endYear,endMonth,endDay;
cin>>startYear>>startMonth>>startDay>>endYear>>endMonth>>endDay;
int num=0,temp=0;
for (int i = startYear; i < endYear; ++i) {//年的天数
num+=pd(i)?366:365;
}
for (int i = 1; i < endMonth; ++i) {//月的天数
temp+=days(i,endYear);
}
for (int i = 1; i < startMonth; ++i) {
temp-=days(i,startYear);
}
num+=temp+endDay-startDay;//日
cout<<num;
}