我想解决6174问题。
所以我制作了如下代码。
http://cfile9.uf.tistory.com/image/254FDD4955CA9C85082FE2
但输入1112时会导致错误。
http://cfile8.uf.tistory.com/image/2448F44955CA9C860DD8A1
我不明白为什么会导致错误。我认为这是正确的代码。
是不是只是python 3 bug?
P.S。 - 因为我无法发布图片,所以我会留下图片'链接。
答案 0 :(得分:0)
如果我不得不猜测,那是因为在减法程序中获得的一些数字少于4个字符。例如,1001 - 1001 = 0. 0
的字符串表示仅为"0"
,因此调用a[1]
,a[2]
或a[3]
将会消失边界。
编辑:具体来说,2111 - 1112 = 999.作为一个字符串,这是“999”,只有三个字符。因此调用a[3]
会导致越界错误。如果您想解决此问题,可以执行以下操作。
a = input()
for i in range(0,1000):
digits = len(a) ##You need to mind how many digits a has
n = [0, 0, 0, 0] ##Initialize all the digits of n to 0
for j in range(0, digits):
n[j+4-digits] = a[j] ##Fill up n with an offset if a has fewer than 4 digit
a = n[0]*1000 + n[1]*100 +n[2]*10 + n[3]
b = n[3]*1000 + n[2]*100 +n[1]*10 + n[0]
if b - a == 6174:
break
a = str(b-a)
print (i+1)
检查一下这是否有效。如果a = "999"
,n
将是[0,9,9,9]
,则应如此。您当前编写的代码将设置n = [9,9,9]
,这会在您调用n[3]
时导致索引错误。
相应地更改代码后,程序产生正确的输出(我推测)。对于a = "1112"
,迭代中a
值的序列为999
8991
8082
8532
,打印的最终值为{{1} }。
希望有所帮助!