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

CodeFights年份转世纪代码无法通过隐藏测试,求修正方案

解决年份转世纪的隐藏测试用例问题

我一眼就瞅出你的代码里藏着一个容易忽略的小bug,这应该就是导致隐藏测试用例失败的关键!

先帮你拆解问题:

  • 你的核心逻辑是判断年份是否需要加1得到对应世纪,但你用了year%10==0作为判断条件——这完全错了!
  • 我们判断一个年份是否属于前一个世纪的最后一年,应该看它是不是整百年(比如1900、2000),也就是用year%100==0,而不是整十年(比如1910、1920)。举个典型反例:1910年按你的代码会返回19,但实际上1910年属于20世纪,这类用例大概率就是隐藏测试里的“坑”。

另外,你的代码里那个while循环完全没必要,题目已经明确输入范围是1<=year<=2005,这个循环只会执行一次,去掉它代码会更简洁。

修正后的代码(基础版)

int centuryFromYear(int year) {
    int x = year / 100;
    if (year % 100 == 0) {
        return x;
    } else {
        return x + 1;
    }
}

更简洁的写法(推荐)

利用整数除法的特性,我们可以一行代码搞定,而且能覆盖所有边界情况:

int centuryFromYear(int year) {
    return (year + 99) / 100;
}

这个写法的原理是:对于非整百年份,加上99后再做整数除法,相当于对year/100向上取整;整百年份加上99后除以100的结果和原商一致,完美符合世纪的计算规则。比如:

  • 1年:(1+99)/100 = 1(正确,1世纪)
  • 1900年:(1900+99)/100 = 19(正确,19世纪)
  • 1999年:(1999+99)/100 = 20(正确,20世纪)
  • 2005年:(2005+99)/100 = 21(正确,21世纪)

内容的提问来源于stack exchange,提问作者Sathya Srivatsav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:02:11