#include <stdio.h>
int dysforcompeleteyears(int startyear,int endyear){ //星期几
int sum=0;
for(int i=startyear;i<endyear;i++)
if(i%400==0||i%4==0&&i%100!=0)
sum+=366;
else
sum+=365;
return sum;
}
int daysforcurrentyear(int year,int month,int day){
int ss[13]={31,28,31,30,31,30,31,31,30,31,30,31};
for(int i=0;i<month-1;i++)
day+=ss[i];
if((year%400==0||(year%4==0&&year%100!=0))&&month>2)
day++;
return day;
}
int main(){
int year,month,day;
scanf("%d-%d-%d",&year,&month,&day);
int sum=0;
sum+=dysforcompeleteyears(1900,year);
sum+=daysforcurrentyear(year,month,day);
sum%=7;
if(sum==0)
printf("星期日\n");
else
printf("星期%d\n",sum);
return 0;
}
//输入格式 如:2014-5-17 这样输入才是对的
追问你这个也是以1900年作基准的吗?如果输入年份在1900以前怎么办呢?
追答#include <stdio.h>
int dysforcompeleteyears(int startyear,int endyear){ //星期几
int sum=0;
for(int i=startyear;i<endyear;i++)
if(i%400==0||i%4==0&&i%100!=0)
sum+=366;
else
sum+=365;
return sum;
}
int daysforcurrentyear(int year,int month,int day){
int ss[13]={31,28,31,30,31,30,31,31,30,31,30,31};
for(int i=0;i<month-1;i++)
day+=ss[i];
if((year%400==0||(year%4==0&&year%100!=0))&&month>2)
day++;
return day;
}
int main(){
int year,month,day;
while(1){
scanf("%d-%d-%d",&year,&month,&day);
int sum=0;
sum+=dysforcompeleteyears(1,year);
sum+=daysforcurrentyear(year,month,day);
sum%=7;
if(sum==0)
printf("星期日\n");
else
printf("星期%d\n",sum);
}
return 0;
}
修改好了,,公元后的任何日期都行,,输入方式2014-5-18
while(1){} 是为了方便测试,如果你不需要可以删除
本回答被提问者采纳