C 语言求 指定日期的 星期数

来源:互联网 发布:centos iptabls实验 编辑:程序博客网 时间:2024/05/17 04:32


#include <stdio.h>
#define leap(n) (((n%4==0&&n%100!=0)||(n%400==0))?1:0)
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
char str[][10]={"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"};
void solve(int &s,int start,int end,int st,int pt)
{
 int i;
 for(i=start;i<end;i++)
  {
  if(leap(i)) s+=366;
  else s+=365; 
 }
 for(i=st;i<pt;i++) s+=a[i-1];
}
int main()
{
    int year,month,day,s;
    year=2009; //--给定日期的年份
    month=12; //--给定日期的月份
    day=9; //--//--给定日期的号数
    s=0;
    if(leap(year)) a[1]=29;

    if(year>=1900)
    {
        s=1;
        solve(s,1900,year,1,month);
        s=(s+day-1)%7;
        if(s==0) s=7;
    }
    else
    {
        s=0;
        solve(s,year+1,1900,month+1,13);
        s=(s+a[month-1]-day)%7;
        s=7-s;
    }
    printf("%s",str[s-1]);

    getchar();
 return 0;
}

原创粉丝点击