编程珠玑第三章—习题4(日期问题)
来源:互联网 发布:avi播放器 for mac 编辑:程序博客网 时间:2024/04/29 11:37
问题1:给定两个日期,计算两者之间的天数。
解答:可以现将月和日换算成该年的第多少天,用后者减去前者,然后年份差距乘以365,同时考虑到两个年份之间闰年的个数,如果闰年个数为n,则最后结果再加上n.
#include <iostream>typedef struct{int year;int month;int day;}date;//日期在相应年份中的编号int transform(date s){bool leap = (s.year % 4 == 0 && s.year %100) || !(s.year % 400);int months[13] = {0,30,28,31,30,31,30,31,31,30,31,30,31};int sequence, addNum;sequence = addNum = 0;for(int i = 0; i < s.month; ++i)sequence += months[i];sequence += s.day;//如果是闰年,且月份在2月份以后,则编号加1,因为2月实际多一天if(leap)addNum = s.month < 3 ? 0 : 1;return sequence+addNum;}//统计两年间闰年个数int numOfLeap(date s1, date s2){int num = 0;for(int year = s1.year; year < s2.year; ++year){if((year % 4 == 0 && year % 100) || !(year % 400))++num;}return num;}int distance(date s1, date s2){//编号差距+年份差距*365+闰年个数return transform(s2)-transform(s1)+(s2.year-s1.year)*365+numOfLeap(s1, s2);}//测试 int main() { date s1, s2; s1.year = 2010; s1.month = 3; s1.day = 30; s2.year = 2015; s2.month = 4; s2.day = 1; std::cout << distance(s1, s2) << std::endl; //getchar(); return 0; }
问题2:给定一个日期,返回值为周几
解答:以一个已知为周几的日期为参照,计算两者之间的天数,结果模7即可得到周几。
//给定日期,返回周几int week(date s){//以2015年11月1日为参照,该天为周日date standard;standard.year = 2015;standard.month = 11;standard.day = 1;//判断要计算的日期在标准日期之前还是之后bool sign;if(s.year < 2015)sign = false;else if(s.year == 2015 && s.month < 11)sign = false;elsesign = true;if(sign){int gap = distance(standard,s);return gap % 7;}else{int gap = distance(s,standard);return -(gap % 7) + 7;;}}
0 0
- 编程珠玑第三章—习题4(日期问题)
- 编程珠玑之第三章习题4
- 日期问题函数(编程珠玑第三章)
- 编程珠玑第三章3.7习题(1-4)
- 编程珠玑第三章习题
- 编程珠玑第三章习题5——英语中的连字符问题
- 编程珠玑第三章习题3.7(5-8)
- 编程珠玑第三章课后习题
- 编程珠玑第三章习题答案
- 编程珠玑之第三章习题1
- 编程珠玑之第三章习题2
- 编程珠玑之第三章习题3
- 编程珠玑之第三章习题5
- 编程珠玑之第三章习题6
- 编程珠玑之第三章习题7
- 编程珠玑之第三章习题8
- 编程珠玑第三章习题1
- 编程珠玑 第二版 第三章 习题答案
- ubuntu中解决无法调节屏幕亮度的问题
- 学习笔记 栈(一.栈的顺序存储结构)
- Mysql锁机制和事务控制
- JAVA设计模式(19) —<行为型>备忘录模式(Memento)
- vb.net机房收费系统重构——存储过程的使用
- 编程珠玑第三章—习题4(日期问题)
- hadoop 之 将若干小文件打包成顺序文件
- bzoj1611【Usaco2008 Feb】Meteor Shower 流星雨
- 第7周项目5-排队模拟看病
- 分辨public、protected和private
- oracle之通用函数decode()
- 判断一个字符串是否为数字
- 城市心情
- mysql事务和锁InnoDB