有这样的日期吗? (单测试用例版)
题目来源:http://pts.hunau.edu.cn/problem.php?cid=2659&pid=9
最近帮人做题目,在csdn上看到有一个多测试版本,因为数组还没学,所以无法利用,而且也想在csdn上发篇文章试试,于是便拿来练手了。
输入
每行有三个小于10000的正整数y,m,d,表示一个日期的年月日。
输出
如果该日期是合乎历法的则输出yes,否则输出no。
输入样例:
2000 2 29
2001 6 31
2001 12 31
2001 11 31
20000 2 21
输出样例:
no
no
yes
no
no
解析:主要在于闰年,大小月(7、8月变换),二月的处理。
** 闰年规则:四年一闰,百年不闰,四百年再闰:链接。例如:2000年是闰年,2100年则是平年
处理:
对于年year,月month,日day;
先判断年,月,日单个是否合法
然后对把y除4取余赋值给a:a=y%4;
把月份m除2取余赋值给c: c=m%2;
因为m在7、8月有变化,相当于跨了一个月,
于是我用:if(m>=8){c=(c+1)%2;}来处理c
则if(m==2)(解决2月的特殊情况),else if 解决其他月份。
注:m>8月的处理应该在其他月份处理之前就要做。
二月特殊情况:
if(m==2){
if(a==0){
a=y%400,b=y%100;
if(a!=0&&b==0&&d>=29){
printf("no"