PTA | Calendar
日历是用于表述时间的系统,从小时到分钟,从月到日,最后从年份到世纪。术语小时、日、月、年、世纪都是日历系统表述时间的单位。 按照目前国内使用的阳历,闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。例如:1700, 1800, 1900 和 2100 不是闰年,而 1600, 2000 和 2400是闰年。 给定公元2000年1月1日后的天数,请您计算这一天是哪年哪月哪日星期几。 # 输入格式: 输入包含若干行,每行包含一个正整数,表示2000年1月1日后的天数。输入最后一行是−1, 程序不必处理。可以假设输出的年份不会超过9999。
输出格式:
对每个测试用例,输出一行,该行给出对应的日期和星期几。格式为“YYYY-MM-DD DayOfWeek”, 其中 “DayOfWeek”必须是下面中的一个:“Sunday”,“Monday”,“Tuesday”,“Wednesday”,“Thursday”,“Friday”或“Saturday”。
输入样例:
1730
1740
1750
1751
-1
输出样例:
2004-09-26 Sunday
2004-10-06 Wednesday
2004-10-16 Saturday
2004-10-17 Sunday
代码示例:
#include<stdio.h>
#include<string.h>
int isleapyear(int n){
if(n%400==0){
return 1;
}
if(n%100==0){
return 0;
}
if(n%4==0){
return 1;
}
return 0;
}
int main(){
int n;
int y,m,d;
int days1[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int days2[]={0,31,29,31,30,31,30,31,31,30,31,30,31};
char day[7][10] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
scanf("%d",&n);
int N;
while(n!=-1){
N=n;
y=2000;
m=1;
d=0;
n++;
while(n>0){
//printf("*%d\n",isleapyear(y)?days2[m]:days1[m]);
//printf("n=%d\n",n);
if(n<=(isleapyear(y)?days2[m]:days1[m])){
d+=n;
n=0;
}
else{
n-=(isleapyear(y)?days2[m]:days1[m]);
m++;
if(m>12){
m-=12;
y++;
}
}
}
printf("%d-%02d-%02d %s\n",y,m,d,day[(N+5)%7]);
scanf("%d",&n);
}
return 0;
}
PTA | Calendar
https://acm.nanyan.cc/posts/6817.html