题目描述: 若一个数(首位不为0)从左到右读与从右到左读都是一样,这个数就叫做回文数,例如12521就是一个回文数。给定一个正整数,把它的每一个位上的数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止。给定的数本身不为回文数。 例如:87则有: STEP1: 87+78=165 STEP2: 165+561=726 STEP3: 726+627=1353 STEP4: 1353+3531=4884 现在给你一个正整数M(12 <= M <= 100),输出最少经过几步可以得到回文数。如果在8步以内(含8步)不可能得到回文数,则输出0。 例如:M=87,则输出4.
示例: 输入:M = 12 输出: 1
分析:
这一类题目,我愿意称之为模拟题,就是模拟题目中描述的操作。 因为这种题目,循环操作的次数并不多,最多只有8步,对于数据量这么小的题,直接模拟就好。
具体见代码
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 回文判断
def judge(s):
s = str(s)
ts = s[::-1]
return s == ts
ans = 0
m = M
while not judge(m) and ans <= 8:
sm = str(m)
# 把数字倒过来
tsm = int(sm[::-1])
# 相加
m += tsm
# 用来记录循环了多少步
ans += 1
print(ans if ans <= 8 else 0)