找回密码
 注册
搜索
查看: 2169|回复: 17

[讨论] 求任一天是星期几之算法

[复制链接]
发表于 2008-10-27 15:11:16 | 显示全部楼层 |阅读模式
求任一天是星期几(公元后)

原想这是很简单的。可自己写了两百行!还不是个绝对的,总需要提供一个已知量(就是已知某一年某一天是周几),将所求量与之比较。
写完,看了下师傅的代码:包括变量定义,一共9行。

贴出来吧!给自己一个教训。

int AccountWeek(byte Year,byte Month,byte Day)
{   
        unsigned int a,y,m, month,year,day,week;
       
        year = ((Year>>4)&0x0f)*10 + (Year&0x0f)+2000;
        month = ((Month>>4)&0x0f)*10 + (Month&0x0f);
        day = ((Day>>4)&0x0f)*10 + (Day&0x0f);
       
        a = (14-month) / 12;
        y = year - a;
        m = month + 12*a - 2;
        Week = (day + y + y/4 - y/100 + y/400 + (31*m)/12) % 7;
                return Week;           //周日为0,周一至周六分别为1~6
}
发表于 2008-10-28 08:20:37 | 显示全部楼层
个人观点:会编软件的脑子都是超厉害!绝顶聪明!
点评回复

使用道具 举报

 楼主| 发表于 2008-10-29 09:46:53 | 显示全部楼层
嘻嘻,老兄啊,我是真发现了,原来谁都不喜欢读别人写的程序啊!
点评回复

使用道具 举报

发表于 2008-11-6 13:42:10 | 显示全部楼层
能否有学表达式表示?
点评回复

使用道具 举报

发表于 2008-11-16 11:10:02 | 显示全部楼层
以前在学校还常看这些算法,弄弄小程序啊啥的,现在工作做硬件,这些都离俺远去了啊[em01]
看了下还是没看懂,顶一下吧
点评回复

使用道具 举报

发表于 2009-1-6 22:03:01 | 显示全部楼层
每个字符都有认识,但就是不知道组合起来是什么意思。为什么这样就行呢?楼主能用逻辑语言描述一下吗?
点评回复

使用道具 举报

发表于 2009-1-8 10:55:02 | 显示全部楼层
这个应该只适用于2000年-2099年吧!
点评回复

使用道具 举报

发表于 2009-8-4 17:08:56 | 显示全部楼层
这个简单呀,先让程序读一个万年历程序,把星期几读出不就行了
点评回复

使用道具 举报

发表于 2009-8-8 13:51:21 | 显示全部楼层
这个程序高中的时候我写过
假设一年365天,加上闰的天数,余7啊
不做软件哦,现在
点评回复

使用道具 举报

发表于 2009-8-8 14:28:48 | 显示全部楼层
现在做硬件这类算法很少去想了,其实有的算法很有意思的
点评回复

使用道具 举报

发表于 2009-8-22 17:20:29 | 显示全部楼层
// 计算2000~2099年任一天星期几
// year    : 00-99
// month: 01-12
// day     : 01-31
unsigned char GetWeekFromDay(unsigned char year,unsigned char month,unsigned char day)
{
    if( month == 1 || month == 2 )   
    {
        month += 12;
        if( year > 0 )
            year--;
        else
            year = 4;
    }

    // 返回星期几(星期一用1表示,而星期天用7表示)
    return 1+(( day + 2*month + 3*(month+1)/5 + year + year/4 ) %7);
}
点评回复

使用道具 举报

发表于 2009-8-24 11:19:28 | 显示全部楼层
[em03]
点评回复

使用道具 举报

发表于 2009-12-4 14:58:06 | 显示全部楼层
高手辈出阿。受益了。
点评回复

使用道具 举报

发表于 2009-12-10 10:22:00 | 显示全部楼层
高手辈出阿。受益了。[em05][em05][em05]
点评回复

使用道具 举报

发表于 2009-12-24 17:43:43 | 显示全部楼层
/*******************************************************************************
* 函数名称  :WeekDay()
* 函数说明  :根据输入日期计算星期
* 输入参数  :year,month date 日期
* 返回值    :当前日期的星期数 0- Sunday 6- Saturday
*******************************************************************************/
uint16 WeekDay(uint16 year,uint8 month,uint8 date)
{
        uint16 temp1,temp2,temp3,temp4,weekday;

        if(month < 3)
        {
                month=month + 12;
                year=year-1;
        }
        temp1=(6*(month + 1))/10;
        temp2=year >> 2;
        temp3=year / 100;
        temp4=year / 400;
        weekday = date + 2 * month + temp1 + year + temp2 - temp3 + temp4 +1;
        weekday = weekday % 7;

        return(weekday);
}
点评回复

使用道具 举报

发表于 2009-12-26 11:09:08 | 显示全部楼层
高手辈出啊............受益了。[em01]
点评回复

使用道具 举报

发表于 2010-3-30 16:33:31 | 显示全部楼层
xuexiele oo[em01]
点评回复

使用道具 举报

发表于 2010-6-7 17:25:00 | 显示全部楼层
高手辈出阿。受益了。
[em01][em02][em08]
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-23 15:32 , Processed in 0.121470 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表