0

我正在尝试用我的代码找到由两个 3 位数字的乘积构成的最大回文数。它适用于 2 位数和 3 位数,但是当我尝试使用 4 位数时,它不再起作用了。最后没有输出或“进程以退出代码0完成”。它就像在无限循环中一样停止了。

palin = 0
for x in range(1, 10000):
    for y in range(1, 10000):
        mult = x * y

        if str(mult) == str(mult)[::-1]:
            if mult > palin:
                palin = mult

print(palin)

我哪里做错了?我大约一个月前才开始使用Python,所以我的代码仍然无效

4

2 回答 2

2

你的算法不正确。第二个if应该与mult = x*y.

我稍微修改了你的代码。使用下面的代码,您会看到算法不会停止。它只是超级慢。你将不得不等待几分钟。

pa = 0
for x in range(1, 10000):
    if x % 100 == 0:
        print(x)
    for y in range(x, 10000):
        m = x*y
        if str(m) == str(m)[::-1]:
            if m > pa:
                pa = m
print(pa)

我更改了第二个range(1, 10000)range(x, 10000)将 1*2 和 2*1 等重复项消除为单个 1*2。

如果您想要加速,请考虑切换到 C 或 C++。

您还可以反转迭代顺序以实现极大的加速

for x in range(10000, 0, -1):
    for y in range(10000, 0, -1):
        m = x*y
        if str(m) == str(m)[::-1]:
            print(m)
            exit(0)
于 2018-11-02T02:39:07.913 回答
0

这是一个无限循环,你知道,它很长......

但实际上不知何故(也许我的电脑很快:-))代码只运行了大约 15 秒......

所以很好。

没有停下来,只是很慢。

于 2018-11-02T02:36:45.723 回答