最早写这个题目的时候,是采用的下面的方法:

一开始处理最特殊的情况,以后再处理更为普遍的情况,会轻松一点。

if (year % 400 == 0)
	leap_year = 1;
else if (year % 100 == 0)
	leap_year = 0;
else if (year % 4 == 0)
	leap_year = 1;
else
	leap_year = 0;

根据上面这个方法写出宏函数,参考代码如下所示:

#include <stdio.h>

#define LEAP_YEAR(y)    ( (y % 400) == 0 ) ? ('L') : ( ( (y % 100) == 0 ) ? ('N') : ( (y % 4 == 0) ? ('L') : ('N') ))

int main()
{
    int year;
    scanf("%d", &year);

    char res = LEAP_YEAR(year);
    printf("%c\n", res);

    return 0;
}

注意括号配对的问题!


不过这样的方法看上去有点繁琐,换种写法:

只有当 (1) year%400 == 0 或者 (2) year%100 != 0并且year%4 == 0时,year才是闰年。

#include <stdio.h>

#define LEAP_YEAR(y)    ( (year%400 == 0) || ( (year%100 != 0) && (year%4 == 0) ) ) ? 'L' : 'N'

int main()
{
    int year;
    scanf("%d", &year);

    char res = LEAP_YEAR(year);
    printf("%c\n", res);

    return 0;
}


 

0.0分

0 人评分

新上线《蓝桥杯辅导》课程,近五年的蓝桥杯省赛与国赛真题都有,从读题开始理解题意、梳理思路、实现代码再提交评测全过程,可有效提升获奖比例甚至进国赛!课程介绍、试听请猛击这里

  评论区

  • «
  • »