hdu 2133 日期的格式转化

What day is it

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2338    Accepted Submission(s): 687


Problem Description
Today is Saturday, 17th Nov,2007. Now, if i tell you a date, can you tell me what day it is ?
 

Input
There are multiply cases.
One line is one case.
There are three integers, year(0<year<10000), month(0<=month<13), day(0<=day<32).
 

Output
Output one line.
if the date is illegal, you should output "illegal". Or, you should output what day it is.
 

Sample Input
   
   
   
   
2007 11 17
 

Sample Output
   
   
   
   
Saturday


这里要考虑闰年的2月这种特殊的情况

题目中还有个bug 要注意的是 当月份或者日子 (month ==0|| day==0)  输出  illegal


#include<stdio.h>
int year[10010],month[15]={0,31,59,90,120,151,181,212,243,273,304,334,365};
int main()
{
   year[0]=0;
   int i;
   for( i=1; i<10000 ;i++)
   {
      if( (i%4==0&&i%100!=0) || (i%400==0) ) year[i]+=year[i-1]+366; //累积年份所包含的日子
      else year[i]+=year[i-1]+365;     
      
   }
   int ye,mo,day,sum,judge;
   while( scanf("%d %d %d",&ye,&mo,&day)!=EOF )
   {
          
          if( ye<=0 || ye>=10000 || mo<=0 || mo>12 || day<=0 || day>31)  //限制条件
          {
              printf("illegal\n");
              continue;
          }
          if(mo==4||mo==6||mo==9||mo==11){   //也月份为30天的限制条件
                              if(day>30)
                               {
                                 printf("illegal\n");
                                 continue;
                               }  
                             }  
          if( (ye%4==0&&ye%100!=0) || (ye%400==0) )    //判断是否为闰年2月
          {   
                  if(mo==2 && day>29) {printf("illegal\n");continue;}      //闰年2月的限制条件
          }
          else {
                 if(mo==2 && day>28) {                                  //平年2月的限制条件
                                         printf("illegal\n");
                                         continue;
                                      }
               }
       
          sum=0;
          sum=year[ye-1]+month[mo-1]+day;    //累积日子数来警醒判定  要注意的是 1year  1month 1day 为星期六 
          if( (ye%4==0&&ye%100!=0) || (ye%400==0)  ){ if(mo>=3)sum+=1;} 
          judge=sum%7;
          switch(judge)
            {
               case 6:printf("Saturday\n");break;
               case 0:printf("Sunday\n");break;
               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;
               
            }
          
          
   }
    
    
}







你可能感兴趣的:(Date,input,output)