关于c语言如何判断日期是否合法?\\有这样的日期吗?

有这样的日期吗? (单测试用例版)

题目来源: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"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值