计算某年的第一天是周几

计算某年的第一天是周几

在最近做的一个项目中需要一个计算任意一天是周几的算法,而这个算法的难点在于计算这个月所在的这一年的第一天是周几,只要知道了这一年的第一天是周几,只要算出这天和这年第一天之间有多少天在对7做取模运算就可以轻易算出这一天是周几,这样问题就转换到了计算这一年的第一天是周几的问题。
这里先补充一个常识,就是公元1年第一天是周一。在知道这个之后我们只要计算出这一年第一天到公元一年第一天之间有多少天的问题。
设要求的年份为y,这一年第一天到公元一年第一天之间有n天
假设没有闰年和平年之分,每年都是365天的话。
n=(y-1)*365;
但是现实情况是有闰年的,我们现在要计算的就是这一年和公元一年之间一共有几个闰年,设为m个;
闰年大约是每4年一个。
m = (y-1)/4;
但是正好是100整数的年份它还不是闰年了(好调皮它),所以:
m = (y-1)/4-(y-1)/100;
更坑的是当它是400的整数的时候他又是闰年了(感觉被玩了),所以:
m = (y-1)/4-(y-1)/100+(y-1)/400;
至此闰年的个数算是算清楚了。
那么一年第一天到公元一年第一天之间的n就是这个数了:
n=(y-1)*365+m = (y-1)*365+(y-1)/4-(y-1)/100+(y-1)/400;
我们只要拿这个数对7做取模运算就可以了,当然还要加1,因为对7取模运算是0-6。
设周几是z。
z = ((y-1)*365+(y-1)/4-(y-1)/100+(y-1)/400)%7 +1;
因为364是7的倍数,所以:
   z = ( (y-1)*364+(y-1)+ (y-1)/4-(y-1)/100+(y-1)/400 )%7 +1;
z =(y-1)+(y-1)/4-(y-1)/100+(y-1)/400)%7 +1
这时我们算的周几就出来了,z是几就是周几,下面是我的C语言实现的代码供大家参考:
main()
{
	int year;
	int z;
	scanf("%d",&year);
	z=((year-1)+(year-1)/4-(year-1)/100+(year-1)/400+1)%7;
	printf("%d",w);
}

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值