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

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

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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论