码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 2133

时间:2018-08-31 23:28:25      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:names   等于   std   als   style   ida   clu   string   大于等于   

蔡勒公式的应用
 
1582/10/4之后时
W=[C/4]-2C+y+[y/4]+[13*(M+1)/5]+d-1
1582/10/4之前时
w=y+[y/4]+[c/4]-2c+[13(m+1)/5]+d+2

w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
c:世纪减1(年份前两位数)
y:年(后两位数)
m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,
比如2003年1月1日要看作2002年的13月1日来计算)
d:日
(测试数据有点水)
#include<cstdio>
#include<string>
using namespace std;

int year, month, day;

string ans[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
bool m[] = {false, true, false, true, false, true, false, true, true, false, true, false, true};

int main()
{    
    int sum = 0;
    while(~scanf("%d%d%d", &year, &month, &day))
    { 
        if((year == 0 || month == 0 || day == 0) || (month==2 && day>29) || (!m[month]&&day == 31) || (!((year%4==0 && year%100!=0) || year%400==0) && month==2 && day==29) ){
            puts("illegal");
            continue;
        }
        if(month < 3){
            year -= 1;
            month += 12;
        }
        int c = year/100 , y = year % 100;
        int w = c/4 - 2*c + y/4 + y + (26*(month+1)/10) + day -1;
        
        cout<<ans[(w%7+7)%7]<<endl;
    }
    return 0;

}

 

 

hdu 2133

标签:names   等于   std   als   style   ida   clu   string   大于等于   

原文地址:https://www.cnblogs.com/mifankai/p/9568567.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!