题目:
题目是网上看到的,意思是:给定一个数字,求解比这个数字大的最小的对称数字,如:比10大的最小的对称数字为11,比111大的最小的对称数字为:121,比9999大的最小对称数字为:10001,以此类推
思路:
这个明显就是一个回文数的求解问题,只是加上了数的大小的条件限制而已
具体实现如下:
#!usr/bin/env python
#encoding:utf-8
'''
__Author__:沂水寒城
功能:寻找比指定数字大的最小对称数
'''
def huiwen(one_num):
'''
输入字符串,判断是否是回文序列,返回布尔值
'''
one_str=str(one_num)
length=len(one_str)
if length%2==0:
half=length/2
first_str=one_str[:half]
second_str=''.join(list(one_str[half:])[::-1])
if first_str==second_str:
return True
else:
return False
else:
half=(length+1)/2
first_str=one_str[:half-1]
second_str=''.join(list(one_str[half:])[::-1])
if first_str==second_str:
return True
else:
return False
def find_min_duichen_num(num):
'''
寻找比num大的最小的对称数字,即回文数字
'''
num+=1
while not huiwen(num):
num+=1
return num
if __name__ == '__main__':
num_list=[10,23,44,100,731,1220,9999,12222]
for one_num in num_list:
print '比{0}大的最小对称数字为:{1}'.format(one_num, find_min_duichen_num(one_num))
结果如下:
比10大的最小对称数字为:11
比23大的最小对称数字为:33
比44大的最小对称数字为:55
比100大的最小对称数字为:101
比731大的最小对称数字为:737
比1220大的最小对称数字为:1221
比9999大的最小对称数字为:10001
比12222大的最小对称数字为:12321
打印出来的那一刻突然感觉还是挺好玩的