判断一个整数是否是一个合法的日期
看到了云风大哥写的算法,感觉很好,贴上来看看:
下面的程序用两种算法实现了判断,并比较了效率的高低
作者:云风
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char valid[1232];
void init_valid_table()
{
int m[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int i,j;
memset(valid,0,1232);
for (i=0;i<12;i++) {
for (j=1;j<=m[i];j++) {
valid[(i+1)*100+j]=1;
}
}
}
int valid_date1(int d)
{
int year;
int day=d%10000;
if (day>1231)
return 0;
if (!valid[day])
return 0;
year=d/10000;
if (year<1900 || year>2100) {
return 0;
}
if (day==1228) {
if (year%4!=0) {
return 0;
}
if (!(year%100==0 && year%400!=0)) {
return 0;
}
}
return 1;
}
int month_day[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int valid_date2(int d)
{
int year=d/10000;
int month=(d/100)%100;
int day=d%100;
if (year<1900 || year>2100 || month<1 || month>12) {
return 0;
}
if (day<1 || day>month_day[month]) {
return 0;
}
if (month==2 && day==28) {
if (year%4!=0) {
return 0;
}
if (!(year%100==0 && year%400!=0)) {
return 0;
}
}
return 1;
}
#define RDTSC _asm _emit 0x0f _asm _emit 0x31
#pragma warning (push)
#pragma warning (disable: 4035)
__inline unsigned __int64 timestamp()
{
__asm RDTSC
}
#pragma warning (pop)
int create_date()
{
int year=rand()%200+1900;
int month=rand()%50;
int day=rand()%50;
return year*10000+month*100+day;
}
int main()
{
int n=10000000;
int i;
unsigned __int64 t;
unsigned __int64 rand_time;
rand_time=timestamp();
for (i=0;i<n;i++) {
int r=create_date();
}
rand_time=timestamp()-rand_time;
printf("%u\n",(unsigned int)rand_time);
t=timestamp();
for (i=0;i<n;i++) {
int r=create_date();
valid_date1(r);
}
t=timestamp()-t-rand_time;
printf("%u\n",(unsigned int)t);
t=timestamp();
init_valid_table();
for (i=0;i<n;i++) {
int r=create_date();
valid_date2(r);
}
t=timestamp()-t-rand_time;
printf("%u\n",(unsigned int)t);
return 0;
}
发表评论
- 浏览: 8129 次
- 性别:

- 来自: 北京

- 详细资料
搜索本博客
我的相册
共 14 张
最近加入圈子
最新评论
-
Struts2中实现自定义分页 ...
下面的评论中已经有说明了
-- by tangshuo -
Struts2中实现自定义分页 ...
我这有个很奇怪的问题,刚打开页面时,数据都对的,包括:总页数,当前页数,上下页显 ...
-- by tangshuo -
Struts2中实现自定义分页 ...
我这有个很奇怪的问题,刚打开页面时,数据都对的,包括:总页数,当前页数,上下页显 ...
-- by caixian_2008 -
Struts2中实现自定义分页 ...
url参数,有什用呀??????????? 是必须的吗??????????
-- by caixian_2008 -
Struts2中实现自定义分页 ...
这其实是Java的自动拆箱功能。自JDK5.0的新特性。包括自动装箱和自动拆箱。 ...
-- by tangshuo






评论排行榜