You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言实现:查找1300~1400区间输入年份的最近闰年

C语言闰年判断及最近闰年查找实现方案

原有代码问题修正

  • 原代码中while(1300<year<1400)的写法不符合C语言语法:该表达式会先计算1300<year得到布尔值0/1,再与1400比较,结果永远为真,会触发死循环,需要修改为year > 1300 && year < 1400
  • 缺失完整的闰年判断逻辑,标准判定规则如下:
  1. 能被400整除的年份是闰年
  2. 能被4整除但不能被100整除的年份是闰年
  3. 其余情况均为非闰年
    你要求的输入范围是1300<y<1400,该区间内不存在整百年份(整百年1300、1400都不在输入范围内),补全的整百年判断逻辑可以兼容所有场景,无需针对该区间做特殊处理。

完整实现代码

#include <stdio.h>

// 闰年判断函数,是闰年返回1,否则返回0
int is_leap(int year) {
    if (year % 400 == 0) {
        return 1;
    }
    if (year % 100 == 0) {
        return 0;
    }
    if (year % 4 == 0) {
        return 1;
    }
    return 0;
}

int main()
{
    int year, offset;
    printf("请输入年份:");
    scanf("%d", &year);
    
    // 输入范围校验
    if (year <= 1300 || year >= 1400) {
        printf("输入错误,请输入1301~1399之间的年份\n");
        return 1;
    }
    
    // 先判断当前年份是否为闰年
    if (is_leap(year)) {
        printf("%d年是闰年\n", year);
        return 0;
    }
    
    // 查找最近的闰年,offset从1开始递增
    offset = 1;
    while(1) {
        // 先检查更早的年份,若要优先取更晚的可以调换两个判断的顺序
        if (is_leap(year - offset)) {
            printf("%d年不是闰年,最近的闰年是%d年,距离%d年\n", year, year - offset, offset);
            break;
        }
        if (is_leap(year + offset)) {
            printf("%d年不是闰年,最近的闰年是%d年,距离%d年\n", year, year + offset, offset);
            break;
        }
        offset++;
    }
    
    return 0;
}

代码逻辑说明

  • 优先做输入合法性校验,不符合范围直接提示错误退出
  • 单独封装is_leap函数实现闰年判断,整百年的判断逻辑在函数中已经完整实现
  • 查找最近闰年时从步长1开始递增,同时检查当前年份加减步长的结果,找到第一个符合条件的就输出。若前后两个闰年距离相同,默认优先输出更早的闰年,调换两个is_leap判断的顺序即可改为优先输出更晚的闰年。

内容的提问来源于stack exchange,提问作者Amirhossein Behrad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:36:01