蓝桥杯 日历问题 计算两个日期的时间差
来源:互联网 发布:moe软件简介 编辑:程序博客网 时间:2024/05/16 19:37
人类历史上出现了很多种历法。现行的公历即格里历由儒略历改革而来。它是目前较为精确和规则简明的一种历法,约3300年误差一日。因为闰年问题以及每个月的长度不等,仍然使得某些计算较为麻烦。比如:求两个日期间差多少天。
下面的代码实现了求两个由公历表示的日期间差多少天的功能。
其计算原理是先求出每个日期距离1年1月1日的天数差值,再进一步做差即可。
请研读代码,填写缺失的部分。
把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。
struct MyDate
{
int year;
int month;
int day;
};
int GetAbsDays(MyDate x)
{
int i;
int month_day[] = {31,28,31,30,31,30,31,31,30,31,30,31};
int year = x.year-1; // 因为欲求距离1年1月1日的距离
int days = year * 365 + year/4 - year/100 + year/400;
if(x.year%4==0 && x.year%100!=0 || x.year%400==0) month_day[1]++;
for(i=0; i<______________; i++)
days += month_day[i];
days += x.day-1;
return days;
}
int GetDiffDays(MyDate a, MyDate b)
{
return GetAbsDays(b) - GetAbsDays(a);
}
int main(int argc, char* argv[])
{
MyDate a = {1842,5,18};
MyDate b = {2000,3,13};
int n = GetDiffDays(a,b);
printf("%d\n", n);
}
这还真是一个比较好的算法,要计算两个日期的时间差,先计算每一个日期到1年1月1日的时间,然后再计算这两个天数的差值,这样做思路特别清晰,因为不用考虑哪个年在前,哪个年在后的问题,在计算的时候,还有几个我认为是亮点:
1.将每一个月的天数存到一个数组当中,这样做就不用使用n多的if了,不过其实有一个优化的地方,就是12月份的天数其实不用存,因为计算的时候永远也用不到这一天。
2.days = year * 365 + year/4 - year/100 + year/400;这句话用来计算n年距离1年的天数差,仍然写的非常简练,其中 year/4 - year/100和year/400是闰年的天数
3.动态修改每个月的天数的数组
看来可以考虑以后使用这种方法来计算了,我之前整理了一篇,那个还需要考虑正负之间的问题。
最后,那个空着的地方当然就是计算每个月的天数之和,不过,就像int year = x.year-1;这句话一样,不要忘了是计算的差值,所以需要使用x.month-1才行。
0 0
- 蓝桥杯 日历问题 计算两个日期的时间差
- 计算两个日期的时间差
- Java 计算两个日期的时间差
- python 计算两个带日期的时间差
- MySql计算两个日期的时间差函数
- java 计算两个日期的时间差
- Oracle 计算两个日期的时间差
- MySql计算两个日期的时间差函数
- MySql计算两个日期的时间差函数
- MySql计算两个日期的时间差函数
- 两个日期之间的时间差计算DateDiff
- MySql计算两个日期的时间差函数
- Oracle计算两个日期的时间差
- MySql计算两个日期的时间差函数
- asp.net 计算两个日期的时间差
- iOS开发---计算两个日期的时间差
- python 计算两个带日期的时间差
- MySql计算两个日期的时间差函数
- Android中如何使用ViewPager实现类似laucher左右拖动效果
- android mac环境下安装
- 2014阿里巴巴9月14北京校园招聘笔试及参考答案
- [转]android点滴之NFC手机如何轻松读取银行卡信息?
- 判断字符串是否匹配
- 蓝桥杯 日历问题 计算两个日期的时间差
- IOS中获取各种文件的目录路径的方法
- 孤儿进程与僵尸进程[总结]
- CocoaPods的使用
- swift判断与元组
- 向内存中传送数据
- HDU 5200 Trees (正向线段树,逆向并查集)
- 表的连接方式:NESTED LOOP、HASH JOIN、SORT MERGE JOIN
- 《卡耐基写给男人的12堂财商课》摘录