c语言 第二日问题

1.根据题目我们知道,这道题主要就是对特殊情况的考察。题本身考察的知识很常规,但是一些特殊情况可能会没有考虑到,导致运行错误。 

2.这道题另外一个值得注意的是定义年份year要用long long ,因为year的数字可能会比较大,如果用int的话,当year较大,运行结果会出现乱码。

 

 

 

#include<stdio.h>   //第二日问题
int main()
{
	int  m, d;
	long long y;  //定义y用long long 避免y过大出现乱码
	while (scanf("%lld",&y),y!=0)  //输入0为循环结束的条件
	{
		scanf("%d%d", &m, &d);
		if (m == 12 && d == 31)  //特殊日期12-31
		{
			y++; m = 1; d = 1;
		}
		else if (m == 2 && (d == 28 || d == 29))  //特殊日期2-28or2-29
		{
			if (((y % 400 == 0) || ((y % 4 == 0) && (y % 100 != 0))) && d == 29)  //闰年2-29
			{
				m++; d = 1;
			}
			else if (((y % 400 == 0) || ((y % 4 == 0) && (y % 100 != 0))) && d == 28) //闰年2-28
			{
				d++;
			}
			else  //平年2-28
			{
				m++; d = 1;
			}
		}
		else if ((m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) && d == 31)  //31天的月份
		{
			m++; d = 1;
		}
		else if ((m == 4 || m == 6 || m == 9 || m == 11) && d == 30)  //30天的月份
		{
			m++; d = 1;
		}
		else
		{
			d++; 
		}
		printf("%lld %d %d\n", y, m, d);
	}
	return 0;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值