如何不使用任何字符串相关方法打印回文数字图案?
不依赖字符串相关内容打印对称数字图案的其他实现方法
需要打印的目标图案:
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
相关产品推荐
相关产品推荐

