b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

黄历算法_万年历算法_农历万年历算法(31)

电脑杂谈  发布时间:2017-01-16 03:03:28  来源:网络整理

*************************************************/ void main() { init(); while(1) { keyscan();//不停的检测按键是否被按下 } }

第5卷 第4期中 国 水 运Vol.5No.4 2007年4月China Water TransportApril2007

万年历算法研究及实现

张剑锋 陈慕君

摘 要:万年历是一个经典的算法问题,在教学过程中可以作为实例进行分析讲解,具有较高的学习分析价值,也具有一定的实用价值,结合不同的方法,本文有一个系统全面的介绍。 关键词:万年历 算法 阴历 阳历 闰年

中图分类号:TP29文献标识码:A文章编号:1006-7973(2007)04-0143-02

万年历是一个古老而又经典的算法问题,已经有不少的实现方法,但是都多少会存在一些问题和不足,在这里对此算法做一个系统的分析与介绍,先撇去农历与公历之间的转化,只做公历与星期的讨论。

注意这样一个事实:从公元元年一月一日开始到现在,每一天都是连续的,而每个星期有七天,也是连续的,也就是说日期和星期是的,没有断档现象。基本思想是:计算出当前天是从公元元年一月一日开始的第几天,再利用星期的周期性来计算公元任何一天是星期几。

假设当前年份为y,并忽略闰年,则从公元元年一月一日到y-1年共有365*(y-1)天,加上闰年多出来的天数,即加

1*

((y-1)/4-(y-1)/100+(y-1)/400)

365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)。

我们再补上从当前1月1日开始到当前天的天数e,即为所求。

即365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e。 它的值即为当前天是从公元元年一月一日开始算起的第几天。补上一个x(x是与公元元年一月一日是星期几有关的一个0~6的整数),并将这个表达式赋给变量t,即:t=x+365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e,再用t除以7,余几即为星期几(余0为星期日)。

下面讨论x的求法,如果知道公元元年一月一日是星期几,就可以直接得到x的值,但现在公式还没有求出来,不知道公元元年一月一日是星期几。不过没关系,毕竟知道最近的日期是星期几。不妨看一下2001年1月1日是星期几,结果是星期一,代入公式得t=x+730516,用730516除以7,得104355,余数是1,则为了保证2001年1月1日是星期一,取x 为0,所以公元元年一月一日也是星期一。至此,得到了完整的公式:

t=365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e, 再将它做一下改进,我们将公式变形为:

t=(52*7+1)*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e, 利用星期的周期性,将52*7+1从公式中删除为: t=(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e,

T"};

void main( ) {

int d,m,y,e,t,f;

printf("INPUT THE DAY:");scanf("%d",&d);

printf("INPUT THE MONTH:");scanf("%d",&m);

printf("INPUT THE YEAR:");scanf("%d",&y);switch(m){


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-26593-31.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...