请问大神,C语言中指定年月日怎么取得这一天是星期几?

nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;这段代码怎么解释?

#include <stdio.h> 
int main()
{
    int day,mn,yr,i,days=0,s,k; 
    int mont[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 
    char wek[][9]={ {'S','u','n','d','a','y'}, 
    {'M','o','n','d','a','y'}, 
    {'T','u','e','s','d','a','y'}, 
    {'W','e','d','n','s','d','a','y'}, 
    {'T','h','u','r','s','d','a','y'}, 
    {'F','r','i','d','a','y'}, 
    {'S','a','t','u','r','d','a','y'} }; 
    printf("Inpute the date (year-month-day):");
    scanf("%d-%d-%d",&yr,&mn,&day);
    if((0==yr%4 && 0!=yr%100)||0==yr%400)
        mont[2]=29;
    else
        mont[2]=28;
    for (i=0;i<mn;i++) 
        days+=mont[i];
    days+=day;
    s=yr-1+(int)((yr-1)/4)-(int)((yr-1)/100)+(int)((yr-1)/400)+days;
    k=s%7;
    printf("%d-%d-%d is %s[%d].\n",yr,mn,day,wek[k],k);
    return 0;

运行结果:


最常见的公式: 

W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D 

Y是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。 

  最好用的是蔡勒公式: 

W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1 

C是世纪数减一,y是年份后两位,M是月份,d是日数。1月和2月要按上一年的13月和14月来算,这时C和y均按上一年取值。 

  两个公式中的[...]均指只取计算结果的整数部分。算出来的W除以7,余数是几就是星期几。如果余数是0,则为星期日

追问

请问你用的是什么编译器?

追答#include <stdio.h> 
int main()
{
    int day,mn,yr,i,days=0,s,k; 
    int mont[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 
    char wek[][9]={ {'S','u','n','d','a','y'}, 
    {'M','o','n','d','a','y'}, 
    {'T','u','e','s','d','a','y'}, 
    {'W','e','d','n','s','d','a','y'}, 
    {'T','h','u','r','s','d','a','y'}, 
    {'F','r','i','d','a','y'}, 
    {'S','a','t','u','r','d','a','y'} }; 
    printf("Inpute the date (year-month-day):");
    scanf("%d-%d-%d",&yr,&mn,&day);
    if((0==yr%4 && 0!=yr%100)||0==yr%400)
        mont[2]=29;
    else
        mont[2]=28;
    for (i=0;i<mn;i++) 
        days+=mont[i];
    days+=day;
    s=yr-1+(int)((yr-1)/4)-(int)((yr-1)/100)+(int)((yr-1)/400)+days;
    k=s%7;
    printf("%d-%d-%d is %s[%d].\n",yr,mn,day,wek[k],k);
    return 0;
 // ä¸å¥½æ„æ€ï¼Œè¿™é‡Œå°‘了半个}
}追问

谢谢,我懂了,你用的是VC吗?

追答

是的

温馨提示:答案为网友推荐,仅供参考
相似回答