Sicily 1791. Philia's Problem

本文介绍了一种使用蔡勒公式快速计算指定日期是星期几的方法,并通过C语言实现了一个具体的程序示例。该程序不仅可以计算出给定日期是周几,还能自动调整日期到下一个星期天。

用模拟的方法算很繁琐,而且很容易出错。

其实可以用蔡勒公式,快速求某一天是星期几。

#include<cstdio> int days[12]={31,28,31,30,31,30,31,31,30,31,30,31}; bool isLeapYear(int y) { return ( (y%100!=0)&&(y%4==0) ) || (y%400==0); } //0=Monday..6=Sunday int getweekdays(int y, int m, int d) { //一二月份看成前一年的13、14月份 if(m==1 || m==2 ) { m+=12; --y; } return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; } int main() { int t,m,y,d; scanf("%d", &t); for (int i=0;i<t; ++i) { scanf("%d%d%d", &m, &d, &y); int k=getweekdays(y,m,d); //还得等k天才到下一个Sunday if(k==6) { k=7; } else { k=6-k; } bool tag=isLeapYear(y); days[1]+=tag;//闰年二月要多加一天 d+=k; if ( d>days[m-1] ) { d-=days[m-1]; ++m; if( m>12) //下一个月已到新一年 { m=1; ++y; } } //利用c语言的格式化输出很方便 printf("%02d %02d %d/n",m, d, y); days[1]-=tag;//记得还原 } return 0; }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值