用c++3. 打印输出任意指定日期的星期值。日历的编排是每400年一个大循环周期,即今年的月、日、星期的状态和400年前的完全一样。现行天文历法根据天体运行规律,取每年为365.2425天。这样,每400年共有365.2425×400=146097天。如果以365天作为一年,每400年就少了0.2425×400=97天。这97天要靠设置闰年(闰年为366天)来凑齐,所以,每400年需要设置97个闰年。 编程思路:按照以上背景知识可得判断闰年的规律:某年年份如果能被4整除但不能被100整除,或者能被400整除则是闰年。由此规则可推得计算万年历的公式: 上式中:X为公元年数(如2018年);C为从1月1日起,到要计算的那天的天数总和(如2018年4月12日,C=31+28+31+12=102);上式求得S后,将S除以7,余数4即为要计算的这一天的星期值。
时间: 2024-02-01 17:12:31 浏览: 175
c++打印日历,可以打印任意年的日历
5星 · 资源好评率100%
以下是C++代码实现:
```c++
#include <iostream>
using namespace std;
bool isLeapYear(int year) { // 判断闰年
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
return true;
}
return false;
}
int getDays(int year, int month, int day) { // 计算天数总和
int days = 0;
int monthDays[] = {31,28,31,30,31,30,31,31,30,31,30,31}; // 每月的天数
for (int i = 1; i < month; i++) { // 计算当前月之前的天数
days += monthDays[i - 1];
if (i == 2 && isLeapYear(year)) { // 闰年2月29天
days += 1;
}
}
days += day; // 加上当前月的天数
return days;
}
int main() {
int year, month, day;
cout << "请输入日期(格式:年 月 日):";
cin >> year >> month >> day;
int s = (year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 + getDays(year, month, day);
if (isLeapYear(year) && month > 2) { // 如果是闰年且在3月后,天数总和要加1
s += 1;
}
int week = s % 7; // 计算星期值
switch (week) {
case 0:
cout << "星期日";
break;
case 1:
cout << "星期一";
break;
case 2:
cout << "星期二";
break;
case 3:
cout << "星期三";
break;
case 4:
cout << "星期四";
break;
case 5:
cout << "星期五";
break;
case 6:
cout << "星期六";
break;
}
return 0;
}
```
输入指定日期后,程序会先判断该年份是否为闰年,然后计算天数总和(包括当前月之前的天数和当前月的天数),最后根据公式计算星期值。运行程序,输入例如“2022 1 1”,即可得到输出结果“星期六”。
阅读全文