拆数字

问题

在数字中加入 + - _ / ,至少加入一个字符,使得运算结果为原字符的逆序值。值不能用 0 补位。
例 在 100-999 中
351 = 3 _ 51 = 153
。。
。。

解题

每加入一个运算符,数字会减少一个数量级。要得到与原数字一样长度的结果,只能用* +。
用加法不能得到原字符逆序值,因为 3 位数加 1 位数,进位 1 。1 加任何一个 1 位数 不能进位(进位后为 0 不满足条件。)

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for i in range(1000, 9999):
num_list = list(map(int, str(i)))
score = num_list[3]*1000 + num_list[2] *100 +num_list[1]*10 +num_list[0]
if num_list[0]* (num_list[1]*100 + num_list[2]*10 + num_list[3]) == score:
print(i)
if (num_list[0]*10 + num_list[1]) * (num_list[2]*10 + num_list[3])== score:
print(i)
if (num_list[0]*100 + num_list[1]*10 + num_list[2]) * ( num_list[3])== score:
print(i)
if num_list[0] * num_list[1] * (num_list[2]*10 + num_list[3]) == score:
print(i)
if num_list[0] * (num_list[1]*10+num_list[2]) * num_list[3] == score:
print(i)
if (num_list[0]*10 + num_list[1]) * num_list[2] * num_list[3] == score:
print(i)
if num_list[0] * num_list[1] * num_list[2] * num_list[3] == score:
print(i)

5931 = 5 9 31 = 1395

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for i in range(1000,9999):
score = int(str(i)[::-1])
num_list = str(i)
cmp = ['*', '']
for j in cmp:
for k in cmp:
for l in cmp:
cacl_str = num_list[0] + j +num_list[1] + k +num_list[2] + l + num_list[3]
# print(cacl_str)
try:
result = eval(cacl_str)
except:
pass
if len(cacl_str) > 4 and result == score:
print(cacl_str)

5931