(应用直接存取类线性表4.1.1)POJ 2080 Calendar(日期计算)

2014-11-24 00:59:26 · 作者: · 浏览: 2
 
/* 
 * POJ_2080.cpp 
 * 
 *  Created on: 2013年10月25日 
 *      Author: Administrator 
 */  
#include   
#include   
  
using namespace std;  
  
//将起始时间的星期数作为数组的第一个元素  
const char wstr[][20]={  
        "Saturday",  
        "Sunday",  
        "Monday",  
        "Tuesday",  
        "Wednesday",  
        "Thursday",  
        "Friday"  
};  
  
//计算year有多少天  
int days_of_year(int year){  
    if(year % 100 == 0){  
        return (year % 400 == 0)   366 : 365;  
    }  
  
    return (year % 4 == 0)   366 : 365;  
}  
  
//计算year的month月有多少天  
int days_of_month(int month,int year){  
    if(month == 2){  
        return days_of_year(year) == 366   29 : 28;  
    }  
  
    int d;  
    switch(month){  
    case 1:  
    case 3:  
    case 5:  
    case 7:  
    case 8:  
    case 10:  
    case 12:  
        d = 31;  
    break;  
    default:  
        d = 30;  
    }  
  
    return d;  
}  
  
  
int main(){  
    int n;  
    while(scanf("%d",&n)!=EOF,n!=-1){  
        int year = 2000;  
        int month = 1;  
        int day = 1;  
        int weak = n % 7;  
  
        while(n){  
            if(n >
= days_of_year(year)){ n -= days_of_year(year); ++year; }else if(n >= days_of_month(month,year)){ n -= days_of_month(month,year); ++month; }else{ day += n; n = 0; } } cout<