求两个日期,例如1979年12月15日与2015年3月2日之间有多少天。
直接用两个日期相减不好下手,可以先算出两个日期与1年1月1日之间的天数,再相减。
#include<iostream>
using namespace std;
int leap_year(int year) {
int flag = 0;
if (year % 4 == 0) {
flag = 1;
}
if (year % 100 == 0) {
flag = 0;
}
if (year % 400 == 0) {
flag = 1;
}
return flag;
}
int day_get(int year, int month, int day) {
int sum = 0;
int mon[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };//直接省去判断的烦恼
if (leap_year(year)) {
mon[1] = 29;
}
for (int i = 1; i < year; i++) {
sum += 365; //计算机速度很快,这种数目的计算几乎不耗时
if (leap_year(i)) { //用这种累加的方式求天数可以较好地避免闰年带来的麻烦
sum = sum + 1;
}
}
for (int i = 1; i < month; i++) {
sum += mon[i - 1];
}
sum += day;
return sum;
}
int day_count(int year1, int month1, int day1,int year2,int month2,int day2) {
return (day_get(year2, month2, day2) - day_get(year1, month1, day1));
}
int main() {
cout << day_count(1979, 12, 15, 2015, 3, 2) << endl;
return 0;
}