C++判断闰年&日期之差
作者:互联网
判断闰年
地球绕太阳转一周的时间实际是365天5小时48分46秒。算下来,每四年会多出来一天,所以加到那一年的二月。但是这样算,又多算了一点点时间。于是,又规定,整百的年份计算闰年除以400。这样,我们的历法才能最大程度的和地球绕太阳转契合。
总之:非整百年份除以4无余数;整百年份除以400无余数
即:x % 100 != 0 && x % 4 == 0 || x % 400 == 0
计算日期差
思路是,先算出每一天距离0000年1月1日的天数。然后作差计算。
#include <cstdio> #define IS_LEAP_YEAR(x) x % 100 != 0 && x % 4 == 0 || x % 400 == 0 ? 1 : 0 int dayOfMonth[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; struct Date { int y; int m; int d; void nextDay() { d++; if (d > dayOfMonth[m]) { d = 1; m++; if (m > 12) { m = 1; y++; if (IS_LEAP_YEAR(y)) { dayOfMonth[2] = 29; } else { dayOfMonth[2] = 28; } } } } }; int date2day[5000][13][32]; // 该数组作用——将特定日期转化距离 0000-01-01 的天数 int main() { // 初始化 Date tmp = {0, 1, 1}; int cnt = 1; date2day[tmp.y][tmp.m][tmp.d] = cnt++; while (tmp.y < 5000) { tmp.nextDay(); date2day[tmp.y][tmp.m][tmp.d] = cnt++; } // 计算日期差 int y1, m1, d1; int y2, m2, d2; scanf("%4d%2d%2d", &y1, &m1, &d1); scanf("%4d%2d%2d", &y2, &m2, &d2); int result = date2day[y1][m1][d1] - date2day[y2][m2][d2]; if (result < 0) result = -result; result ++; printf("%d\n", result); return 0; }
标签:tmp,闰年,int,31,之差,C++,++,result,date2day 来源: https://www.cnblogs.com/xkxf/p/14446765.html