回文数判断

思路一:将数字转为字符串,然后判断字符串是否为轴对称;这样处理的好处是可以避免数值过大时超出整型存储范围;
#! /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')

参考文献:
1.https://github.com/jackfrued/Python-100-Days

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Neil-

你们的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值