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

如何不使用任何字符串相关方法打印回文数字图案?

不依赖字符串相关内容打印对称数字图案的其他实现方法

需要打印的目标图案:

1
121
12321
1234321
123454321

你已经尝试过两种方式:一种因使用sep=''(属于字符串相关参数)失败,另一种利用平方公式的纯数学方法可行:
失败的代码:

n=5
for i in range(1,n+1):
   print(*list(range(1, n + 1))[:i]+list(range(1, n + 1))[:i][::-1][1:],sep='')

可行的平方计算代码:

n = 5
for i in range(1, n+1):
    print((10**i // 9)**2)

以下是另外两种纯数值计算的实现思路:

思路1:逐位拼接数字

通过嵌套循环分别构建每行的递增段和递减段数值,再将两部分组合成完整数字后打印,全程无任何字符串相关操作:

n = 5
for i in range(1, n+1):
    # 生成递增部分:1 → 12 → 123...
    ascending = 0
    for j in range(1, i+1):
        ascending = ascending * 10 + j
    # 生成递减部分:0 → 1 → 21...
    descending = 0
    for j in range(i-1, 0, -1):
        descending = descending * 10 + j
    # 组合数值:递增部分左移(i-1)位,加上递减部分
    full_number = ascending * (10 ** (i-1)) + descending
    print(full_number)

思路2:利用数位权重计算

直接计算每一位数字对应的权重,累加得到完整数字:

n = 5
for i in range(1, n+1):
    result = 0
    # 处理前半段(1到i)
    for j in range(1, i+1):
        result += j * (10 ** (2*i - j -1))
    # 处理后半段(i-1到1)
    for j in range(i-1, 0, -1):
        result += j * (10 ** (j-1))
    print(result)

这类问题的核心是完全绕开字符串操作,把每行图案视作一个整数,通过数学运算直接生成这个整数后打印即可。平方公式的方法利用了111...1的平方特性,是最简洁的;而逐位构建或权重计算的方法更通用,即使图案规则调整也容易修改。

内容的提问来源于stack exchange,提问作者quora question

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 23:35:02