思路一:将数字转为字符串,然后判断字符串是否为轴对称;这样处理的好处是可以避免数值过大时超出整型存储范围;
#! /usr/bin/python3
# -*- coding: utf-8 -*-
import math
def palindrome():
s = input('请输入一个正整数:')
while type(int(s)) != type(1):
s = input('请重新输入一个正整数:')
l = len(s)
if len(s) == 1:
print('N')
elif len(s) == 2:
if s[0] == s[1]:
print('Y')
else:
print('N')
elif len(s) > 2:
s1 = s[:math.floor(l/2):1]
s2 = s[l:math.floor(l/2):-1]
print(s1)
print(s2)
if (s1 == s2):
print('Y')
else:
print('N')
palindrome()
运行结果:
思路二:list反转方法对比是否与原list相同
import math
def palindrome_2():
s = input('请输入一个正整数:')
while type(int(s)) != type(1):
s = input('请重新输入一个正整数:')
l = list(s)
l.reverse()
s2 = ''.join(l)
print(s2)
if s == s2:
print('Y')
else:
print('N')
思路三:取余法,除10取余可以分别得到每个数位的数字;如果该数字是回文数,那么反方向的数位的数字乘10加余可以得到输入的数字
import math
def palindrome_3():
num = int(input('请输入一个正整数:'))
while num < 0 or type(num) != type(1):
num = int(input('请输入一个正整数:'))
sum = 0
x = num
while x > 0:
sum = sum*10 + x%10
x //= 10
print(sum)
if sum == num:
print('Y')
else:
print('N')
思路四:使用栈将一半的数位进行反转然后与另一半对比
def palindrome_4():
s = input('请输入一个正整数:')
l = []
_len = len(s)
flag = True
for i in range(math.floor(_len/2)):
l.append(s[i])
print('l:',l)
start = math.floor(_len/2)
if (_len % 2 != 0):
start += 1
for i in range(start,_len):
if l.pop() != s[i]:
flag = False
if (flag):
print('Y')
else:
print('N')