星期几代码C++
时间: 2025-05-05 07:02:54 浏览: 50
### C++ 实现计算星期几的算法
以下是基于给定引用中的方法以及常见的蔡勒公式实现的两种方式来计算星期几。
#### 方法一:通过幂运算和取模操作
这种方法的核心思想是利用输入参数 `a` 和 `b` 来模拟某种周期性的变化,并最终映射到一周七天的结果。代码如下:
```cpp
#include <iostream>
using namespace std;
int main() {
int a, b, power = 1;
cin >> a >> b;
for (int i = 1; i <= b; i++) {
power *= a;
power %= 7;
}
switch (power) {
case 0:
cout << "Sunday";
break;
case 1:
cout << "Monday";
break;
case 2:
cout << "Tuesday";
break;
case 3:
cout << "Wednesday";
break;
case 4:
cout << "Thursday";
break;
case 5:
cout << "Friday";
break;
case 6:
cout << "Saturday";
break;
}
return 0;
}
```
此代码片段展示了如何通过循环累乘并取余数的方式得到对应的星期名称[^2]。
---
#### 方法二:使用蔡勒公式
蔡勒公式是一种经典的日期处理算法,用于快速判断某一天属于哪一天。其核心表达式为:
\[ h = \left(q + \lfloor\frac{13(m+1)}{5}\rfloor + K + \lfloor\frac{K}{4}\rfloor + \lfloor\frac{J}{4}\rfloor - 2J\right)\mod 7 \]
其中,
- \( q \): 日;
- \( m \): 月份(注意:3 表示三月,因此对于 January 和 February 需要分别视为上一年的第十三个月和第十四个月);
- \( K \): 年份的最后两位数字;
- \( J \): 年份的前两位数字;
下面是完整的 C++ 实现版本:
```cpp
#include <iostream>
using namespace std;
// 蔡勒公式的函数定义
string getWeekDay(unsigned int year, unsigned int month, unsigned int day) {
if (month == 1 || month == 2) {
month += 12;
year -= 1;
}
int k = year % 100; // 年份后两位
int j = year / 100; // 年份前两位
int h = (day + ((13 * (month + 1)) / 5) + k + (k / 4) + (j / 4) - (2 * j)) % 7;
string weekDays[] = {"Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
return weekDays[h];
}
int main() {
unsigned int year, month, day;
cout << "Enter date (year month day): ";
cin >> year >> month >> day;
cout << "The day of the week is: " << getWeekDay(year, month, day);
return 0;
}
```
这段程序实现了更通用的功能——接受任意合法的年、月、日作为输入,并返回对应的具体星期名称[^3]。
---
### 总结
上述两段代码提供了不同的解决方案。第一种适用于特定场景下的简单问题解决策略,而第二种则更加灵活且广泛适用。如果目标仅限于简单的指数增长模型,则推荐采用第一个方案;而对于实际的日历应用开发而言,建议优先考虑第二个基于蔡勒公式的实现。
阅读全文
相关推荐

















