24h購物| | PChome| 登入
2009-01-20 20:12:52| 人氣1,092| 回應0 | 上一篇 | 下一篇

ACM 602 What Day Is It?

推薦 0 收藏 0 轉貼0 訂閱站台

修改↓

http://tw.myblog.yahoo.com/joybokimo/article?mid=103&prev=104&next=102&l=f&fid=6

/*************************************************************/

  1. #include<stdio.h>   
  2. #include<stdlib.h>   
  3. #include<string.h>   
  4. #include<math.h>   
  5. char month[12][10]={   
  6.      "January","February","March",   
  7.      "April","May","June",   
  8.      "July","August","September",   
  9.      "October","November","December"  
  10.      };   
  11. char day[7][10]={   
  12.      "Sunday","Monday","Tuesday",   
  13.      "Wednesday","Thursday","Friday",   
  14.      "Saturday"  
  15.      };   
  16. int monthday[12]={31,28,31,30,31,30,31,31,30,31,30,31};   
  17. main()   
  18. {   
  19.  int a,b,c,yy,mm,dd,y,m,d,w;   
  20.  while(scanf("%d %d %d",&mm,&dd,&yy)==3&&mm!=0)   
  21.  {   
  22.   y=yy;m=mm;d=dd;/*先不考慮2月的*/  
  23.   if(y<0||m<1||m>12||d<0||(m!=2&&d>monthday[m-1])||(y==1752&&m==9&&d>2&&d<14))   
  24.    {printf("%d/%d/%d is an invalid date.\n",m,d,y);continue;}       
  25.   if(m==2)/*考慮2月的*/  
  26.    {   
  27.     if(y<=1752)   
  28.      {   
  29.       if(y%4==0&&d>29)   
  30.        {printf("%d/%d/%d is an invalid date.\n",m,d,y);continue;}   
  31.       else if(y%4!=0&&d>28)    
  32.        {printf("%d/%d/%d is an invalid date.\n",m,d,y);continue;}   
  33.      }       
  34.     else if(y>1752)   
  35.      {   
  36.       if(y%4==0&&y%100!=0||y%400==0)   
  37.        {   
  38.        if(d>29)   
  39.         {printf("%d/%d/%d is an invalid date.\n",m,d,y);continue;}   
  40.        }   
  41.       else  
  42.        {   
  43.        if(d>28)   
  44.         {printf("%d/%d/%d is an invalid date.\n",m,d,y);continue;}                      
  45.        }    
  46.      }                   
  47.    }        
  48.   if(y>1752||(y==1752&&m>9)||(y==1752&&m==9&&d>=14))   
  49.    {   
  50.      if(m==1||m==2)   
  51.       {   
  52.        m=m+12;   
  53.        y--;   
  54.       }   
  55.       c=y/100;   
  56.       y=y%100;   
  57.       w=(y+y/4+c/4-2*c+26*(m+1)/10+d-1)%7;   
  58.      if(w<0)   
  59.       w=w+7;   
  60.    }   
  61.    else  
  62.     {   
  63.      w=(5+y+(y-1)/4)%7;   /*算出星期*/
  64.      for(a=1;a<m;a++) w=w+monthday[a-1];/*算出1月到該月前的總天數*/   
  65.      if(y%4==0&&m>2)   
  66.       w++;   
  67.          w=(w+dd-1)%7;   
  68.     }         
  69.    printf("%s %d, %d is a %s\n",month[mm-1],dd,yy,day[w]);   
  70.  }   
  71.  return 0;   

台長: 來源不明
人氣(1,092) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ACM |
此分類下一篇:ACM 640 640 - Self Numbers
此分類上一篇:ACM 10110 10110 - Light, more light

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文