What day is it(1246)
2015-01-21 10:59
519 查看
输入:year(0<year<10000), month(0<=month<13), day(0<=day<32).
计算输入的日子是星期几,如果输入不合法则输出illegal
输出:what day it is.
闰年是能被4整除且不能被100整除或者能被400整除的。闰年的2月是29天,平年的二月是28天。
解:先判断不合法的情况,然后计算星期,闰年400年是一个大循环,星期恰好也是循环(开始是周一),仔细计算出day然后对7取余。
#include<stdio.h>
int main()
{
int day,y,m,d,flag1,flag2;
while(scanf("%d%d%d",&y,&m,&d)!=EOF)
{
flag1=0;flag2=0;
y%=400;
if(y==0)
{
y=400;
flag2=1;
}
else if(y%4==0&&y%100!=0)
flag2=1;
if(m==4||m==6||m==9||m==11)
{
if(d>30)
flag1=1;
}
else if(m==2)
{
if(flag2)
{
if(d>29)
flag1=1;
}
else if(d>28)
flag1=1;
}
else
{
if(d>31)
flag1=1;
}
if(flag1||!d||!m)
{
printf("illegal\n");
continue;
}
day=(y-1+(y-1)/4-(y-1)/100)%7;
switch (m)
{
case 1:break;
case 2:day+=3;break;
case 3:day+=3;break;
case 4:day+=6;break;
case 5:day+=1;break;
case 6:day+=4;break;
case 7:day+=6;break;
case 8:day+=2;break;
case 9:day+=5;break;
case 10:day+=0;break;
case 11:day+=3;break;
case 12:day+=5;break;
}
if(flag2&&m>2)
{day++;}
switch ((day+d)%7)
{
case 1:printf("Monday\n");break;
case 2:printf("Tuesday\n");break;
case 3:printf("Wednesday\n");break;
case 4:printf("Thursday\n");break;
case 5:printf("Friday\n");break;
case 6:printf("Saturday\n");break;
case 0:printf("Sunday\n");break;
}
}
return 0;
}
这个太麻烦了,可以用蔡勒(Zeller)公式计算星期
c=y/100; //c代表世纪
y=y-c*100;
week=(c/4)-2*c+(y+y/4)+(13*(m+1)/5)+d-1;
while(week<0)
week+=7;
输出也可以简化
char w[7][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
……
printf("%s\n",w[week%7]);
判断合法也可以写得很短。。。全简化之后就变得很简单了
计算输入的日子是星期几,如果输入不合法则输出illegal
输出:what day it is.
闰年是能被4整除且不能被100整除或者能被400整除的。闰年的2月是29天,平年的二月是28天。
解:先判断不合法的情况,然后计算星期,闰年400年是一个大循环,星期恰好也是循环(开始是周一),仔细计算出day然后对7取余。
#include<stdio.h>
int main()
{
int day,y,m,d,flag1,flag2;
while(scanf("%d%d%d",&y,&m,&d)!=EOF)
{
flag1=0;flag2=0;
y%=400;
if(y==0)
{
y=400;
flag2=1;
}
else if(y%4==0&&y%100!=0)
flag2=1;
if(m==4||m==6||m==9||m==11)
{
if(d>30)
flag1=1;
}
else if(m==2)
{
if(flag2)
{
if(d>29)
flag1=1;
}
else if(d>28)
flag1=1;
}
else
{
if(d>31)
flag1=1;
}
if(flag1||!d||!m)
{
printf("illegal\n");
continue;
}
day=(y-1+(y-1)/4-(y-1)/100)%7;
switch (m)
{
case 1:break;
case 2:day+=3;break;
case 3:day+=3;break;
case 4:day+=6;break;
case 5:day+=1;break;
case 6:day+=4;break;
case 7:day+=6;break;
case 8:day+=2;break;
case 9:day+=5;break;
case 10:day+=0;break;
case 11:day+=3;break;
case 12:day+=5;break;
}
if(flag2&&m>2)
{day++;}
switch ((day+d)%7)
{
case 1:printf("Monday\n");break;
case 2:printf("Tuesday\n");break;
case 3:printf("Wednesday\n");break;
case 4:printf("Thursday\n");break;
case 5:printf("Friday\n");break;
case 6:printf("Saturday\n");break;
case 0:printf("Sunday\n");break;
}
}
return 0;
}
这个太麻烦了,可以用蔡勒(Zeller)公式计算星期
c=y/100; //c代表世纪
y=y-c*100;
week=(c/4)-2*c+(y+y/4)+(13*(m+1)/5)+d-1;
while(week<0)
week+=7;
输出也可以简化
char w[7][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
……
printf("%s\n",w[week%7]);
判断合法也可以写得很短。。。全简化之后就变得很简单了
相关文章推荐
- HDOJ 2133 What day is it
- HDU 2133 What day is it
- hdu 2133 What day is it
- hdu 2133 What day is it
- hdu 2133 What day is it(蔡勒公式)
- What day is it 2133
- HDU 2133 What day is it
- HDU2133:What day is it
- zoj 1256 What Day Is It?
- What Day Is It?(模拟)
- UVa 602 - What Day Is It?
- HDU 2133 - What day is it
- What day is it(逻辑问题)
- HDU2133 What day is it【水题】
- HDU 2133 What day is it(日期转换)
- 当前日期日期hdu 2133 What day is it-java教程
- hdu 1308 What Day Is It?
- HDU2133 What day is it【日期】
- ZOJ1256 UVA602 UVALive5474 What Day Is It?
- HDU 2133 What day is it