主要记录一下日期的算法,老师作业的日期算法惊艳到我了.
先看看老师的代码
#include <iostream> using namespace std; /* *思路: * 1. 分别求出每一个日期与0000年0月1日距离的天数 * 2. 两个距离天数相减即可得到两个日期相差的天数 */ //平年从1月到n月的天数 int mon[12] = { 0,31,59,90,120,151,181,212,243,273,304,334 }; //给出年月日,计算距离0000年0月1日的天数和 int CountDay(int y, int m, int d) { // 计算0-y年的天数 int yearDay = y * 365 + y / 4 - y / 100 + y / 400; // 计算到0-m月的天数 int monthDay = mon[m - 1]; if (m > 2 && ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)) monthDay += 1; return yearDay + monthDay + d; } int main() { int year1, month1, day1; scanf("%4d%2d%2d", &year1, &month1, &day1); int n1 = CountDay(year1, month1, day1); int year2, month2, day2; scanf("%4d%2d%2d", &year2, &month2, &day2); int n2 = CountDay(year2, month2, day2); cout << abs(n1 - n2) + 1 << endl;//abs返回n1和n2相减后的绝对值 }
主要是CountDay()函数的实现非常的棒.主要是int yearDay = y * 365 + y / 4 - y / 100 + y / 400;年的计算非常棒,我们来看看.
我们就以2000这个来讲述把我们先得到所有普通的年的天数,再算闰年情况.
闰年判断条件如下:
能被4整除却不能被100整除或能被400整除的年份就是闰年!
我们先得到能被4整除的数+ y / 4
再减去能被100整除的数- y / 100
再得到能被400整除的数+ y / 400
最后就是我们0~y年的天数总和了.
其他部分的讲解放在注释中了.