来来来,第四题,废话不多,上题目:
回文数的特点就是对称,那就遍历,取对应位置的数字判断是不是回文数就好了,然后找最大值
那首先肯定是写个函数,判断是否是回文数
然后两个数的乘积,从100一直到999,进行遍历
想了一下,找最大值,必然是从大到小找出第一个回文数,就是最大的
上代码:
##Project Euler Problem 004
#判断是否是回文数
def palindrome_num (num):
str_num = str(num)
a = len(str_num)
i = 0
while i <=a//2:
if str_num[i] == str_num[a-1-i]:
i += 1
else:
return False
break
return True
p_num = []
for m in range(999,99,-1):
for n in range(m,99,-1):
num = m*n
if palindrome_num(num):
p_num.append(num)
break
print(max(p_num))
轻轻松松Output:906609
当然三位数的乘积位数在5位数到6位数,最大回文数必然是六位数,发现6位数的回文数有个特点,必能被11整除,(偶数位的回文数都有这个特点,证明就略了),也可以用这个特点简化回文数的判断函数!代码就不放了~下次见!