免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 阿Benni
打印 上一主题 下一主题

[算法] 请教一个算法问题,如何实现一个连续30天循环队列? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-12-15 15:38 |只看该作者
原帖由 cellar 于 2006-12-15 15:27 发表
不知道楼主是想用,还是想玩,给个能用的
[code]
#include <time.h>
int getdayofyear(int year,int month,int day){
struct tm t;
bzero(&t,sizeof(t));
t.tm_year = year;
t.tm_mon = month;
...

正解

论坛徽章:
0
12 [报告]
发表于 2006-12-15 15:47 |只看该作者
原帖由 connet 于 2006-12-15 15:38 发表

正解



发现范了一个低级错误:

  1. #include <time.h>
  2. int getdayofyear(int year,int month,int day){
  3. struct tm t;
  4. bzero(&t,sizeof(t));
  5. t.tm_year = year;
  6. t.tm_mon = month;
  7. t.tm_mday = day;

  8. return mktime(&t)==-1?-1:t.tm_yday;

  9. }
复制代码


注意最后一行,不是->

论坛徽章:
0
13 [报告]
发表于 2006-12-16 18:12 |只看该作者

回复 1楼 阿Benni 的帖子


  1. /* for date-calculation use */
  2. #define leap(y) \
  3.   ((y) % 400 == 0 || ((y) % 100 != 0 && (y) % 4 == 0))

  4. #define to_beg_date(y, m, d)  \
  5.   ((y) * 365 + (y) / 4 - (y) / 100 + (y) / 400 \
  6.           + ((m) - 1) * 30 + ___m_days[(m) - 1] \
  7.           + (d) - 1 - (leap(y) && (m) < 3))

  8. #define LDate(y, m, d) \
  9.   (to_beg_date(y, m, d) - to_beg_date(1899, 12, 31))

  10. /* for date calculation */
  11. short ___m_days[] = {
  12.   0, 1, -1, 0, 0, 1, 1, 2, 3, 3, 4, 4
  13. };
复制代码



注:
是仿照informix数据库日期的规则, 1899/12/31日为第0天, 依次, 1900/01/01为1,
这样, 和月份, 是否闰年就没有关系了吧

论坛徽章:
0
14 [报告]
发表于 2006-12-16 18:39 |只看该作者
原帖由 cellar 于 2006-12-15 15:47 发表



发现范了一个低级错误:
[code]
#include <time.h>
int getdayofyear(int year,int month,int day){
struct tm t;
bzero(&t,sizeof(t));
t.tm_year = year;
t.tm_mon = ...



这个好

论坛徽章:
0
15 [报告]
发表于 2006-12-17 04:31 |只看该作者
用一个数组记录每个月的天数,考虑闰年

《the c programming language》里有这个的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP