如何用数学方法根据日期求星期几
时间: 2024-05-22 22:13:50 浏览: 195
可以使用基姆拉尔森计算公式来计算。公式如下:
W= (d+2m+3(m+1)/5+y+y/4-y/100+y/400+1) mod 7
其中,W代表星期几,d代表日期,m代表月份,y代表年份,mod代表取余运算。需要注意的是,如果月份为1或2,应当把它们当做上一年的13月或14月来计算,即y-1代表上一年的年份,m+12代表13月或14月。
相关问题
怎么用c语言求输入日期是星期几?
要使用C语言计算给定日期的星期几,你可以使用Zeller's congruence算法,这是一个古老的数学公式用于根据日期推算星期数。以下是一个简单的实现:
```c
#include <stdio.h>
int getDayOfWeek(int year, int month, int day) {
// 对月份进行修正(因为0表示1月)
if (month < 3) {
month += 12;
year--;
}
int q = day;
int m = month;
int K = year % 100;
int J = year / 100;
int h = (q + ((13 * (m + 1)) / 5) + K + (K / 4) + (J / 4) - 2 * J) % 7;
switch (h) {
case 0:
return "Sunday";
case 1:
return "Monday";
case 2:
return "Tuesday";
case 3:
return "Wednesday";
case 4:
return "Thursday";
case 5:
return "Friday";
case 6:
return "Saturday";
default:
return "Invalid date"; // 如果h超出范围,说明输入错误
}
}
int main() {
int year, month, day;
printf("Enter a date (YYYY MM DD): ");
scanf("%d %d %d", &year, &month, &day);
char weekday[10];
strcpy(weekday, getDayOfWeek(year, month, day));
printf("The date %d-%02d-%d is %s\n", year, month, day, weekday);
return 0;
}
```
这个程序首先获取用户的年份、月份和日子,然后调用`getDayOfWeek`函数,该函数根据Zeller's congruence计算并返回对应的英文星期名称。请注意,这个算法没有处理闰年的特殊情况,如果你需要更精确的结果,可能需要引入闰年检查。
给出某年某月,某日,求出这天是星期几,不要用复杂的数学方法,一个c语言代码
#include <stdio.h>
int main() {
int year, month, day;
printf("请输入年份:");
scanf("%d", &year);
printf("请输入月份:");
scanf("%d", &month);
printf("请输入日期:");
scanf("%d", &day);
int days[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //每个月的天数
int sum = 0;
for(int i = 1; i < month; i++) {
sum += days[i];
}
sum += day;
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { //判断是否是闰年
if(month > 2) {
sum++;
}
}
int weekday = (year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 + sum; //计算星期几
weekday %= 7;
char* weekdays[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; //星期几的字符串数组
printf("%d年%d月%d日是%s\n", year, month, day, weekdays[weekday]);
return 0;
}
阅读全文