1 条题解
-
0
解题思路
我们需要计算从年月日(星期六)开始,经过给定的天数后的日期和星期几。关键在于:
计算年份:
从年开始,逐年减去每年的天数(或),直到剩余天数不足以构成一整年。
计算月份:
在确定的年份中,逐月减去每月的天数(///),直到剩余天数不足以构成一整月。
计算日期:
剩余的天数即为当月的日期(因为天数从开始计算)。
计算星期几:
由于年月日是星期六,因此( % )可以映射到星期几(对应 % == )。
解题方法
判断闰年:
普通闰年:
能被整除但不能被整除。
世纪闰年:
能被整除。
计算年份:
初始年份是年,初始剩余天数为输入的天数n。
循环判断当前年份是否为闰年,并减去相应的天数(或),直到剩余天数不足一整年。
计算月份:
从月到月,逐月减去该月的天数,直到剩余天数不足一整月。
计算日期:
剩余天数即为当前月的日期。
计算星期几:
由于年月日是星期六,因此( % )可以映射到星期几:
→
→
→
→
→
→
→
C++代码实现:
#include <stdio.h> int isRunNian(int n) { if(n%400==0||(n%4==0&&n%100!=0)) return 1; else return 0; }//是否为闰年 int monthdate(int i,int m) { int date; if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) date=31; if(i==4||i==6||i==9||i==11) date=30; if(i==2) { if(isRunNian(m)) date=29; else date=28; } return date; }//这个月多少天 int main() { int n; char week[][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; while(scanf("%d",&n)&&n!=-1) { int i,j,k,t,m; i=2000;j=1;t=366;k=31;m=n; while(m/t>0) { i++; m-=t; if(isRunNian(i)) t=366; else t=365; }//计算年份 while(m/k>0) { j++; m-=k; k=monthdate(j,i); }//计算月份 printf("%d-%02d-%02d ",i,j,m+1); printf("%s\n",week[(n-1)%7]); } return 0; }
- 1
信息
- ID
- 1081
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者