年月周星期计算年月日 C++

根据输入的年、月、周数和星期,使用C++编程求解对应日期。代码中默认周日开始新的一周,讨论了不同周定义可能导致的结果差异,并通过基姆拉尔森计算公式验证输入的合理性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

年月周星期计算年月日 C++

题目

输入年、月、第几周、周几,输出对应的 年、月、日。

参考资料

1.https://blog.youkuaiyun.com/qq_42403069/article/details/86305578
2.https://blog.youkuaiyun.com/u011017652/article/details/17229781

注意

如果有错,欢迎指正!
一、每一周定义有两种:
1.周日到周六
2.周一到周日
这两种不同的定义可能会导致不同的计算结果。这里的代码放入的是第一种定义的结果,若想改为第二种,需要调整代码中的b[ ]和后续代码。下面所述全部以第一种定义为基础。
图1
图二
二、“第几周”的定义

  1. 每周的第一周和最后一周一般不完整,如上图(以周日-周六为一周为例):2018年2月的第一周从周四开始,第一周没有周日、周一、周二、周三;最后一周没有周四、周五、周六。
  2. 每个月份的周数有一定范围,不存在“第0周”、“第7周”、“第8周”的说法。

思路

主要是在搜索相关问题时,发现基姆拉尔森计算公式的存在,利用该公式求出每月1号的星期数。根据求得的星期可以判断输入是否正确,例如:输入2019 07 1 7(2019年7月第1周周日),是错误输入,因为该月第一周没有周日。
以输入2019 07 3 2为例,首先计算2019年7月1日是星期一,计算第一周天数,计算第二周天数,计算第三周天数,累加之后判断是否超过该月最大的天数,超过就返回0,未超过就计算出了号数。

c++代码

周日到周六为一周:


#include<iostream>
#include<iomanip>
using namespace std;
//基姆拉尔森计算公式计算某年某月某日对应的星期
int CaculateWeekDay(int yy, int mm, int d)
{
   
   
	if (mm == 1 || mm == 2) {
   
   
		mm += 12;
		yy--;
	}
	int iWeek = (d + 2 * mm + 3 * (mm + 1) / 5 + yy + yy / 4 - yy / 100 + yy / 400) % 7;
	return iWeek + 1;
}

int a[][12] = {
   
    {
   
    31,28,31,30,31,30,31,31,30,31,30,31 },
{
   
    31,29,31,30,31,30,31,31,30,31,30,31 } };
int b[8] = {
   
    0,1,2,3,4,5,6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值