现在使用的历法是从罗马人演变而来的。凯撒编纂了一个日历系统,后来被称为儒略历。在这个系统中,除了4月、6月、9月和11月,所有月份都有31天,其中有30天,2月,在非闰年有28天,闰年有29天。同样,在这个系统中,闰年每四年发生一次。这是因为古罗马的天文学家计算出一年的长度是365.25天,所以每隔四年,就需要增加一天,以使日历与季节保持一致。为了做到这一点,他们在每年增加一天(2月29日),这是4的倍数。
朱利安规则:
每年4的倍数就是闰年,也就是说有额外的一天(2月29日)。
1582年,教皇格里高利的天文学家注意到这一年不是365.25天,而是更接近365.2425。因此,闰年规则将修订如下:
格雷戈里规则:
每年4的倍数就是闰年,除非是100的倍数而不是400的倍数。
为了弥补季节在那之前的变化,日历实际上改变了10天:1582年10月4日之后的第二天被宣布为10月15日。
英国及其帝国(包括美国)直到1752年才改用公历,即9月2日之后的第二天被宣布为9月14日。(推迟的原因是亨利八世和教皇之间的不良关系。)
编写一个程序,使用时间日历转换美国的日期并输出工作日。
朱利安规则:
每年4的倍数就是闰年,也就是说有额外的一天(2月29日)。
1582年,教皇格里高利的天文学家注意到这一年不是365.25天,而是更接近365.2425。因此,闰年规则将修订如下:
格雷戈里规则:
每年4的倍数就是闰年,除非是100的倍数而不是400的倍数。
为了弥补季节在那之前的变化,日历实际上改变了10天:1582年10月4日之后的第二天被宣布为10月15日。
英国及其帝国(包括美国)直到1752年才改用公历,即9月2日之后的第二天被宣布为9月14日。(推迟的原因是亨利八世和教皇之间的不良关系。)
编写一个程序,使用时间日历转换美国的日期并输出工作日。
也就是说在1752年9月2日以后,第二天成为了9月14日
而1582年的10月15日不用关心
也就是分为两个阶段1752年9月2日以前,1752年9月14日以后
AC代码:
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
string c[7]={"Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"};
string a[12]={"January", "February", "March", "April","May", "June", "July", "August","September", "October", "November", "December"};
int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int demo(int m,int d,int y)
{
int sum_y=365*(y-1);
int sum_m=0;
for(int i=0;i<m-1;i++)
sum_m+=b[i];
int sum=sum_y+sum_m+d;
return sum;
}
int main()
{
//freopen("1.txt","r",stdin);
//freopen("3.txt","w",stdout);
int m,d,y;
while(1)
{
cin>>m>>d>>y;
if(m==d&&d==y&&y==0)
break;
b[1]=28;
int sum;
int add;
int day;
bool pend=true;
if(y==1752&&m==9&&d>2&&d<14)
pend=false;
else{
if(y==1752&&m==9&&d<=2||y==1752&&m<9||y<1752)
{
if(y%4==0)
b[1]=29;
if(y <= 0 || m > 12 || m < 1 || d < 1 ||d>b[m-1])
pend=false;
else
{
sum=demo(m,d,y);
add=((y-1)/4+5)%7;
sum+=add;
}
}
else
{
if(y%4==0&&y%100!=0||y%400==0)
b[1]=29;
if(y <= 0 || m > 12 || m < 1 || d < 1 ||d>b[m-1])
pend=false;
else
{
sum=demo(m,d,y);
add=(y-1)/4-(y-1)/100+(y-1)/400;
sum+=add;
}
}
day=sum%7;
}
if(pend)
cout<<a[m-1]<<" "<<d<<", "<<y<<" is a "<<c[day]<<endl;
else
cout<<m<<"/"<<d<<"/"<<y<<" is an invalid date."<<endl;
}
return 0;
}