当前位置: 首页 > 新闻动态 > 网络资讯

C++ 怎么判断闰年 C++ 年份整除逻辑代码实现【练习】

作者:冰火之心 浏览: 发布日期:2026-01-31
[导读]:闰年判断标准为:能被4整除但不能被100整除,或能被400整除,表达式为(year%4==0&&year%100!=0)||(year%400==0),需确保year为正整型并校验范围。
闰年判断标准为:能被4整除但不能被100整除,或能被400整除,表达式为(year % 4 == 0 && year % 100 != 0) || (year % 400 == 0),需确保year为正整型并校验范围。

判断闰年的标准逻辑怎么写

闰年判断不是简单看能不能被 4 整除,C++ 里必须严格按规则:能被 4 整除但不能被 100 整除,或者能被 400 整除。写成表达式就是 (year % 4 == 0 && year % 100 != 0) || (year % 400

== 0)

常见错误是只写 year % 4 == 0,这会让 1900、2100 这类世纪年份误判为闰年——它们能被 4 和 100 整除,但不能被 400 整除,所以不是闰年。

注意:年份变量必须是整型(intlong),负数或 0 年份不参与公历闰年计算,实际使用中建议加范围校验(比如 year > 0)。

std::cin 输入年份后直接判断的写法

练习时最常遇到的是输入一个年份,输出“是闰年”或“不是闰年”。关键点在于别忘了读入后立刻做合法性检查,避免后续运算出错。

示例片段:

int year;
std::cin >> year;
if (year <= 0) {
    std::cout << "年份必须为正整数\n";
} else if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
    std::cout << "是闰年\n";
} else {
    std::cout << "不是闰年\n";
}

这里没封装函数,适合初学练习;若要复用,应把判断逻辑抽成 is_leap_year(int year) 函数。

为什么 % 运算符顺序和括号不能乱加

% 是左结合、同级优先级高于 ==!=,但低于 !,所以 year % 100 != 0 没问题,而 !(year % 100) == 0 就错了——它等价于 (!(year % 100)) == 0,即把取余结果转布尔再比较,逻辑完全跑偏。

容易踩的坑包括:

  • 漏掉外层大括号,导致 &&|| 优先级混淆
  • = 代替 ==,编译可能不报错但逻辑恒假/恒真
  • 对负数年份直接取模,C++ 中负数取模结果符号依赖实现(C++11 起规定向商截断,但最好避免)

在 C++11 及以后用 constexpr 写编译期判断

如果年份是字面量或 constexpr 变量(比如 constexpr int y = 2025;),可以提前在编译时算出结果,减少运行时开销。

写法示例:

constexpr bool is_leap_year(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
static_assert(is_leap_year(2000), "2000 应该是闰年");
static_assert(!is_leap_year(1900), "1900 不是闰年");

注意:constexpr 函数参数必须是字面量类型,且所有分支必须能被编译器静态求值;运行时传入普通变量会退化为普通函数调用。

真正容易被忽略的是:闰年规则只适用于格里高利历(现行公历),1582 年前的年份不适用这套逻辑,但练习题通常默认处理 1583 年之后的正整数年份。

免责声明:转载请注明出处:http://m.hclxt.cn/news/786852.html

扫一扫高效沟通

多一份参考总有益处

免费领取网站策划SEO优化策划方案

请填写下方表单,我们会尽快与您联系
感谢您的咨询,我们会尽快给您回复!