题目如下:
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天
输入描述:
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出描述:
每组数据输出一行,即日期差值
示例1
输入
20110412
20110422
输出
11
C++实现:
#include<iostream>
using namespace std;
//判断闰年条件需要谨记
int judgeYear(int year){
if((year%4==0&&year%100!=0)||(year%400==0)){
return 366;
}
else
return 365;
}
int main(){
int a;
int b;
int day[12]={31,28,31,30,31,30,31,31,30,31,30,31};
while(scanf("%d",&a)!=EOF){
cin>>b;
int dayA=a%100;
int dayB=a%100;
int monA=(a%10000)/100;
int monB=(b%10000)/100;
int yearA=a/10000;
int yearB=b/10000;
int diff=0;
//计算两个年份之间整年所差的日期
for(int i=yearA+1;i<yearB;i++){
diff+=judgeYear(i);
}
//计算较小年份距离本年结束所差日期
int datediff=0;
for(int i=0;i<monA-1;i++){
datediff+=day[i];
}
datediff+=dayA;
int datediff1=365-datediff;
//考虑闰年且月份小于2月
if(judgeYear(yearA)==366&&monA<=2){
datediff1+=1;
}
//计算较大年份距离本年开始所差日期
int datediff2=0;
for(int i=0;i<monB-1;i++){
datediff2+=day[i];
}
datediff2+=dayB;
if(judgeYear(yearB)==366&&monB>2){
datediff2++;
}
cout<<datediff2+datediff1+diff+1<<endl;
}
}
注意:此题在输入的8位数字中提取年月日的方法,可以利用
scanf("%4d%2d%2d",&year,&mon,&day)!=EOF
这种方法更为简洁,则不需要代码中不断取余、整除等计算取得年月日的值。