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

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

题目

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

参考资料

1.https://blog.csdn.net/qq_42403069/article/details/86305578
2.https://blog.csdn.net/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,
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您好,根据输入的年月日,可以计算出该有多少天。具体的计算方法是,先判断是否为闰,如果是闰,则该有366天,否则为365天。然后根据输入的份,计算出该有多少天,最后将该的天数加上前面所有份的天数,即可得到该的总天数。 ### 回答2: 输入一个日期,可以通过判断是闰还是平来确定该有多少天。 闰判断规则是:份能被4整除但不能被100整除,或者能被400整除的份都是闰。 首先,我们将输入的份、份、日期存储到变量,然后进行判断判断份是否为闰,如果是闰,将该份的天数设置为366天;如果不是闰,则天数为365天。 然后,我们根据输入的判断每个份的天数。一般来说,1、3、5、7、8、10、12都是31天;4、6、9、11都是30天;2则需要判断是否是闰。 如果是2且是闰,将天数设置为29天;如果是2且不是闰,将天数设置为28天。 最后输出计算得出的天数即可。 代码示例: ``` def calculate_days(year, month, day): days = 0 # 判断份是否为闰 if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0): days = 366 else: days = 365 # 判断份的天数 if month in [1, 3, 5, 7, 8, 10, 12]: days += 31 elif month in [4, 6, 9, 11]: days += 30 elif month == 2: if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0): days += 29 else: days += 28 return days # 输入年月日 year = int(input("请输入份:")) month = int(input("请输入份:")) day = int(input("请输入日期:")) # 计算天数 total_days = calculate_days(year, month, day) # 输出结果 print("该有", total_days, "天。") ``` 运行示例: 请输入份:2022 请输入份:3 请输入日期:15 该有 365 天。 ### 回答3: 要输出某有多少天,需要考虑以下几个方面: 1. 首先判断是否为闰。闰有366天,非闰为365天。通过以下规则来判断是否为闰: - 若份能被4整除但不能被100整除,则为闰。 - 若份能被400整除,则也是闰。 2. 对于非闰,每个的天数如下: - 1:31天 - 2:28天 - 3:31天 - 4:30天 - 5:31天 - 6:30天 - 7:31天 - 8:31天 - 9:30天 - 10:31天 - 11:30天 - 12:31天 3. 对于闰,2的天数为29天,其他份与非闰相同。 因此,可以根据输入的份和份来判断有多少天。 以下是一个用Python语言实现的例子: ```python def get_days_in_year(year, month, day): if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0: # 判断 days_in_month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] else: days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] return sum(days_in_month[:month - 1]) + day # 累加前几个的天数,再加上当前的天数 # 输入年月日 year = int(input("请输入份:")) month = int(input("请输入份:")) day = int(input("请输入日期:")) days = get_days_in_year(year, month, day) # 调用函数计算天数 print(f"{year}有{days}天。") ``` 注意:由于输入的份、份和日期的合法性没有进行特别的判断,在实际应用可能需要添加一些错误处理的逻辑。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值