题目描述:
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入:
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出:
每组数据输出一行,即日期差值
样例输入:
20130101
20130105
样例输出:
5
#include<cstdio>
#include<iostream>
#include<cassert>
#include<string>
#include<fstream>
using namespace std;
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}};
bool isLeap(int year){
return (year % 100 != 0 && year % 4 == 0)||(year % 400 ==0);
}
int main(){
ifstream in;
in.open("test.txt");
assert(in.is_open());
int time1;
int time2;
while(!in.eof()){
in >> time1;
in >> time2;
}
if( time1 < time2) {
int tem = time1;
time1 = time2;
time2 = tem;
}
int year1 = time1/10000, mon1 = time1 % 10000 / 100 , day1 = time1 % 100;
int year2 = time2/10000, mon2 = time2 % 10000 / 100 , day2 = time2 % 100;
int ans = 1;
while( year1 > year2 || mon1 > mon2 || day1 > day2){
day2++;
if( day2 == month[mon2][isLeap(year2)] + 1){
year2++;
day2 = 1;
}
if( mon2 == 13){
year2++;
mon2 = 1;
}
ans++;
}
printf("%d\n",ans);
return 0;
}
总结:边界条件一定要考虑清楚,否则功亏一篑。