您的位置:首页 > 其它

2018_1_25_What Day Is It_公式

2018-01-25 21:21 393 查看
https://vjudge.net/problem/UVA-602

#include<iostream>

#include<string>

#include<vector>

#include<algorithm>

#include<cstring>

#include<fstream>

using namespace std;

const char wstr[][20]={

    "Sunday","Monday","Tuesday",

    "Wednesday","Thursday","Friday","Saturday"

};

const char mstr[][20]={

    "","January","February","March","April","May","June","July",

    "August","September","October","November","December"

};

bool isleap(int year,bool old=false){

    if(old)return year%4==0?true:false;

    return (year%100==0?year%400==0:year%4==0);

}

int days_of_month(int month,int year,int leap){

    if(month==2)return leap?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 days_of_year(int year,bool old){

    return isleap(year,old)?356:355;

}

bool valid(int month,int day,int year,bool old){

    if(year<0)return false;

    if(month<0||month>12)return false;

    if(day<1||day>days_of_month(month,year,isleap(year,old))){

        return false;

    }

    if(year==1752&&month==9&&3<=day&&day<=13)return false;

    return true;

}

bool isold(int month,int day,int year){

    return year<1752||(year==1752&&month<9)||

    (year==1752&&month==9&&day<=2);

}

int whatday(int d,int m,int y){

    int ans;

    if(m==1||m==2)m+=12,y--;

    if((y<1752)||(y==1752&&m<9)||(y==1752&&m==9&&d<3))

    ans=(d+2*m+3*(m+1)/5+y+y/4+5)%7;

    else

    ans=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;

    return (ans+1)%7;

}

ofstream out;

int main(){

    int month,year,day;

    while(cin>>month>>day>>year){

        if(!month&&!day&&!year)break;

        bool old=isold(month,day,year);

        if(!valid(month,day,year,old)){

            printf("%d/%d/%d is an invalid date.\n",month,day,year);

        }else{

            int week=whatday(day,month,year);

            printf("%s %d, %d is a %s\n",mstr[month],day,year,wstr[week]);

        }

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: