OJ题库 时间和日期系列 今天星期几?

标题## 今天星期几?

问题 F: 今天星期几

前言

时间限制: 1 Sec 内存限制: 128 MB
题目描述
编一程序实现:
由输入1980年以后的任意一个日期后,计算机能打印出该日期是星期几.
日期肯定合法,绝不会出现类似-23年13月52日的情况
已知1980年1月1日是星期二。

输入,输出

输入
年 月 日
日期有3个整数组成,中间用空格隔开

输出
一个整数星期
星期用1 2 3 4 5 6 7表示 (若是星期日就输出7)

样例测试

样例输入
2009 1 2
样例输出
5

代码如下(示例):

#include<stdio.h>
int main()
{
int y,m,d,x;
scanf("%d%d%d",&y,&m,&d);
if(m== 1||m==2)
{
m=m+12;
y=y-1;
}
x=(d+2m+(3m+3)/5+y+y/4-y/100+y/400)%7+1;
printf("%d",x);
return 0;
}

方法及解释说明
吉姆拉尔森计算公式
W= (d+2m+3(m+1)/5+y+y/4-y/100+y/400+1)%7

if(m== 1||m==2)
{
	m=m+12;
	y=y-1;
}
 如果是一月或二月的话要当成13月和14月 并且要减一年

基姆拉尔森公式的计算结果是对7取余的
结过有0,1,2,3,4,5,6 七种可能
用w = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7的公式
结果是这样对应的
0:星期一
1:星期二
2:星期三
3:星期四
4:星期五
5:星期六
6:星期日

根据题意,星期天表示为7,所以使用w = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7+1达到要求的效果

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值