/*****根据当前的年、月、日 算出当前是周几.
基姆拉尔森计算公式: W = (D + M*2 + 3*(M+1)/5 + Y + Y/4 -Y/100 + Y/400)%7.
公式有一个特殊之处: 当 M = 1或2时,要把当前的年份转化为上一年的13或14作为数值
                                                                代入公式计算;

 
  
  1. #include<iostream>  
  2. using namespace std;  
  3. char *weekday[7] = {  
  4.      "Monday",  
  5.      "Tuesday",  
  6.      "Wednesday",  
  7.      "Thursday",  
  8.      "Friday",  
  9.      "Satureday",  
  10.      "Sunday" 
  11. };  
  12. int main()  
  13. {  
  14.     int Y, M, D;/*Y is year, M is month, D is day */ 
  15.     int wpos;   
  16.     char Tmp;  
  17.     bool IsSpecial = 0;  
  18.     while(cout<<"Input The Date(Among the date is devided by '-'):", cin>>Y>>Tmp>>M>>Tmp>>D){  
  19.         if(M==1 || M==2){  
  20.           --Y; /* 把当前年份当做上一年计算 */ 
  21.           M+=12;/* 把当前月份作为上一年的13月、14月 计算 */    
  22.           IsSpecial = 1;          
  23.         }  
  24.         wpos = (D+2*M+3*(M+1)/5+Y+Y/4-Y/100+Y/400)%7;  
  25.         if(IsSpecial){  
  26.           ++Y;  
  27.           M-=12;  
  28.         }  
  29.         char p[50];  
  30.         sprintf(p, "The Current Date is : %d.%d.%d.%s\n", Y,M,D,weekday[wpos]);  
  31.         cout<<p;   
  32.     }  
  33.     system("pause");  
  34.     return 0;  
  35. }