两年份间的闰年

1 篇文章 0 订阅

题目输入两个年份,要求按从大到小的顺序输出两个年份之间所有的闰年(包含边界),两个年份之间用西文空格隔开,且最后一个年份后面不允许有空格。

题目还给了两个样例:

样例1:

​ 输入:1963 1984

​ 输出:1984 1980 1976 1972 1968 1964

样例2:

​ 输入:1999 1999

​ 输出:NULL

要求还蛮多的,不过还好。闰年的判断是经典的编程入门题,至于所谓的空格,或许我们第一个想法是判断最后一个年份,让它的输出不带空格。但换个角度想,为什么不判断第一个呢?很明显,第一个要比最后一个更好欺负,因为它站在明面上,揪过来就可以修理。

这样,我们只需要第一个年份单独输出,其余的年份按照空格年份输出即可。

代码如下:

#include <stdio.h>
int main()
{
    int year1 = 0;
    int year2 = 0;
    int i = 0;
    int count = 0;
    scanf("%d %d", &year1, &year2);
    
    for (i = year2; i > year1 - 1; i--)//从大到小输出
    {
        if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0))
        {
            if (!count)
            {
                printf("%d", i);
                count++;
            }
            else 
            {
                printf(" %d", i);
            }
        }
    }
    if (!count)
    {
        printf("NULL");
    }
    
    return 0;
}

好像是没问题的,但其实我们(当然,可能只有我)太天真了。人家那么老实?样例1是小的年份在前,大的年份在后,但人家可没保证一定如此。

在这里插入图片描述

所以,我们还需要加一段代码,确保小年份在前,大年份在后(也可以反过来,看你代码怎么写,总之,一定要保持一致):

if (year1 > year2)
{
    int t = 0;
    t = year1;
    year1 = year2;
    year2 = t;
}

在这里插入图片描述

或者,也可以用三目操作符。不过,下面的用法是错误的。

year1 = (year1 > year2 ? year2 : year1);
year2 = (year1 > year2 ? year1 : year2);

输出结果如下:

在这里插入图片描述

我们仔细调试一下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

原来,在我们把小的年份给year1的时候,year1所代表的年份缺少备份,这就导致year1和year2相等,输出异常也就不奇怪了。

-End-

本人小白,若有疏漏,请各位大佬多多包容、指正!

如果本文对你有帮助的话,请不要吝惜你的点赞~

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值