【上机笔试之五】计算两个日期的差值

    xiaoxiao2021-03-25  110

    计算两个日期差的天数是上机笔试中常考的一种提醒,这里程序的大致思路是:预先计算出每一天距离1900年1月1日的天数,两次结果一做差就是两个日期差的天数。代码如下:

    #include <iostream> #include <algorithm> #include <string.h> using namespace std; //判断是否是闰年 #define ISYEAP(x) ((x % 100 != 0) && (x % 4 != 0) || (x % 400 != 0)) ? 1 : 0 //预设闰年和非闰年每月的天数 int daynum[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 }, }; struct Date{ int year; int month; int day; void nextday(){ day++; if (day > daynum[month][ISYEAP(year)]) { day = 1; month++; if (month > 12) { month = 1; year++; } } } }; int abs(int y){ return (y > 0) ? y : -y; } //程序思路:预先计算出每一天距离1900年1月1日的天数,两次结果一做差就是两个日期差的天数。 //缺点,如果设定的基准日期比1900年小很多,会导致数组太大,空间溢出。 void main() { int y1,y2,m1,m2,d1,d2; int buf[201][13][32]; Date tmp; tmp.day = 1; tmp.month = 1; tmp.year = 1900; int num = 0; while (tmp.year < 2100){ num++; buf[tmp.year - 1900][tmp.month][tmp.day] = num; tmp.nextday(); } while ( scanf("M--", &y1, &m1, &d1) != EOF) { scanf("M--", &y2, &m2, &d2); printf("%d", abs(buf[y2 - 1900][m2][d2] - buf[y1 - 1900][m1][d1]) + 1); } }

    上机笔试系类教程: 【上级笔试之一】数据输入 【上机笔试之二】冒泡排序 【上机笔试之三】快速排序 【上机笔试之四】快速排序(2) 【上机笔试之五】计算两个日期的差值 【上机笔试之六】Hash应用 【上机笔试之七】Hash应用(2)-从大到小顺序输出其中前m大的数 【上机笔试之八】二分法查找 【上机笔试之九】贪心算法-换零钱 【上机笔试之十】栈应用-扣号匹配

    转载请注明原文地址: https://ju.6miu.com/read-13767.html

    最新回复(0)