C++ 函数实现日期星期几计算 (已知2000年1月1日为星期六)
以下是 C++ 代码实现:
#include <iostream>
using namespace std;
void getWeekday(int yy, int mm, int dd) {
// 判断输入是否合法
if (mm < 1 || mm > 12 || dd < 1 || dd > 31) {
cout << 'Invalid input!' << endl;
return;
}
// 计算距离2000年1月1日的天数
int days = 0;
for (int i = 2000; i < yy; i++) {
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {
days += 366;
} else {
days += 365;
}
}
for (int i = 1; i < mm; i++) {
switch (i) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
days += 31;
break;
case 4: case 6: case 9: case 11:
days += 30;
break;
case 2:
if ((yy % 4 == 0 && yy % 100 != 0) || yy % 400 == 0) {
days += 29;
} else {
days += 28;
}
break;
}
}
days += dd - 1;
// 计算星期几
string weekdays[] = {'Saturday', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'};
int weekday = (days + 6) % 7;
// 输出结果
cout << weekdays[weekday] << endl;
}
int main() {
getWeekday(2022, 1, 1); // 输出Saturday
getWeekday(2000, 1, 1); // 输出Saturday
getWeekday(2022, 2, 29); // Invalid input!
return 0;
}
思路解析:
- 首先判断输入的月份和日期是否合法,如果不合法直接输出错误信息并返回;
- 计算输入的日期距离2000年1月1日的天数,需要考虑闰年的情况;
- 根据总天数计算星期几,可以用取模运算,注意要加上一个偏移量6,因为2000年1月1日是星期六;
- 最后根据星期几输出对应的字符串即可。
原文地址: https://www.cveoy.top/t/topic/oJNs 著作权归作者所有。请勿转载和采集!