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
相关产品推荐
相关产品推荐

