En utilisant Python, inversez un entier et déterminez s'il s'agit d'un palindrome. Voici ma définition de l'inverse et du palindrome. Ai-je une logique correcte?
def reverse(num):
s=len(num)
newnum=[None]*length
for i in num:
s=s-1
newnum[s]=i
return newnum
def palindrome(num):
a=str(num)
l=len(z)/2
if a[:1]==a[-1:][::-1]:
b=True
else:
b=False
J'ai du mal à écrire def main
.
def palindrome(num):
return str(num) == str(num)[::-1]
Les nombres entiers n'ont pas len ().
Tester si un nombre est un palindrome est aussi simple que tester si le nombre est égal à son inverse (bien que si vous voulez une efficacité maximale, vous pouvez simplement comparer les caractères des deux extrémités de la chaîne jusqu'à ce que vous atteigniez le milieu).
Pour trouver l'inverse d'un entier, vous pouvez soit le faire à la dure (en utilisant mod% et division entière // pour trouver chaque chiffre et construire le nombre inverse):
def reverse(num):
rev = 0
while num > 0:
rev = (10*rev) + num%10
num //= 10
return rev
Ou la manière la plus simple (transformer le nombre en une chaîne, utiliser la notation par tranche pour inverser la chaîne et la retourner en entier):
def reverse(num):
return int(str(num)[::-1])
def revers(num):
rev = 0
while(num > 0):
rem = num %10
rev = (rev *10) + rem
num = num //10
return num
Long mais lisible:
def palindrome(x):
a=""
x=str(x)
for i in range(len(x),0,-1):
a+=x[i-1]
print a
if a==x:
return True
else:
return False
Il s'agit d'une implémentation récursive d'une ligne illisible basée en partie sur le réponse de pedrosorio .
def reverse(i):
return int(i!=0) and ((i%10)*(10**int(math.log(i,10))) + reverse(i//10))
def is_palindrome(i):
return i == reverse(i)
Cela fonctionne pour l'entier i ≥ 0
.
Notez que reverse(123) == reverse(1230) == 321
. Ce n'est pas un problème, étant donné que tout entier non nul qui se termine par 0 ne peut pas être un palindrome de toute façon.
Notez également que l'inversion complète de l'entier peut bien sûr ne pas être nécessaire pour déterminer s'il s'agit d'un palindrome. L'inversion peut être mise en œuvre de manière à être interrompue tôt s'il est déterminé que le nombre n'est pas un palindrome.
Ce code convertit int en chaîne et vérifie ensuite si la chaîne est pallindrome. L'avantage est qu'il est rapide, l'inconvénient étant qu'il se convertit en String en compromettant ainsi la solution parfaite à remettre en question.
Il gère negative int
ainsi que.
class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
s = str(x)
if x >=0 :
if s == s[::-1]:
return True
else:
return False
else:
return False
J'ai utilisé une liste pour ce programme, fonctionne aussi avec des chaînes.
print('Enter Something')
a = list(input())
for i in range ((len(a)),0,-1):
print (a[i-1],end='')
import math
a = raw_input("Enter number:")
n = -1
reverse = 0
for i in a:
n += 1
digit = math.pow(10,n)
reverse = int(i)*digit + reverse
print int(reverse)
if int(reverse) == int(a):
print "Palindrome"
else:
print ":("
t=int(input("enter nos of test cases= "))
while t>0:
n=int(input("enter number="))
rev=0
while n>0:
digit=n%10
rev=rev*10+digit
n=n//10
print(rev)
t-=1