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

HackerRank Print Function问题:无字符串实现123...n输出报错求助

问题分析与解决方案

你的代码在n≤9时能正常运行,是因为1-9都是一位数,每个数仅需占据一个数位;但当n≥10时,像10、11这类多位数,你的逻辑只给它们分配了一个数位的位置(通过10**m),导致计算结果错误。比如n=10时,你的代码算出的是1*10^9 + 2*10^8 + ... +9*10^1 +10*10^0 = 1234567900,而正确结果应该是12345678910——核心问题是没有为多位数预留足够的数位。

修正思路

不使用字符串的前提下,我们可以通过动态调整当前结果的数位长度来实现需求:每次迭代时,先计算当前数字i的位数,再将之前的结果乘以10^位数(相当于为新数字腾出对应数位),最后加上当前数字i。这样就能保证每个数字都占据正确的数位数量。

修正后的代码

n = int(input())
total = 0

for i in range(1, n + 1):
    # 计算当前数字i的位数(纯数学方法,不使用字符串)
    digit_count = 0
    temp = i
    while temp > 0:
        temp = temp // 10
        digit_count += 1
    # 更新结果:先扩容数位,再加入当前数字
    total = total * (10 ** digit_count) + i

print(total)

验证示例

  • 当n=5时,计算流程:
    total=0 → 0*10+1=1 →1*10+2=12 →12*10+3=123 →123*10+4=1234 →1234*10+5=12345,结果正确。
  • 当n=10时,计算到i=10时:
    此前total为123456789,10的位数是2,因此123456789*100 +10=12345678910,结果正确。

内容的提问来源于stack exchange,提问作者Shivam Thacker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:22:09