下一个回文数

-1 投票
12 回答
28373 浏览
提问于 2025-04-19 08:03

我刚开始学习编程,所以能不能告诉我我的代码哪里出问题了?

我想要打印出下一个回文数,如果用户输入的数字(n)不是回文数的话。

n = int(input("Enter any number :- "))

reverse = 0
temp = n

while (n!=0):
    reverse = reverse * 10
    reverse = reverse + n%10
    n=n//10 
if(temp==reverse):
    print ("Already palindrome:: ")

if(temp != reverse):
     new_temp = temp
     new_reverse = 0
     for i in range(new_temp,new_temp+10):
        while(temp != 0):
            new_reverse = new_reverse * 10
            new_reverse = new_reverse + temp%10
            temp = temp//10
         if(new_temp==new_reverse):
             print ("Next pallindrome is :- ",new_temp)
             break
         if(new_temp != new_reverse):
             temp = new_temp+1

12 个回答

0

这个问题有很多很棒的解决方法。

其中一种方法是

def nearest_palindrome(number):
    #start writitng your code here
    while True:
        number+=1
        if str(number) == str(number)[::-1]:
            return number 

number=12300
print(nearest_palindrome(number))

感谢你花时间阅读我的回答 : )

0

如果给定了一个明确的范围:

# function to check if the number is  a palindrome
def palin(x):                 
    s=str(x)
    if s==s[::-1]:
        return True
    else:
        return False

n=int(input("Enter the number"))
# Putting up range from the next number till 15 digits
for i in range(n+1,int(10e14)):
    if palin(i) is True:
        print(i)
        break
2

如果这对你有帮助,我认为可以通过 n/2 次迭代来解决这个问题,其中 n 是输入数字的长度。下面是我用Python写的解决方案:

def next_palin_number(number):
    number+=1
    # Convert the number to a list of its digits.
    number = list(str(number))
    # Initialize two indices for comparing symmetric digits.
    i = 0
    j = len(number) - 1
    while i < j:
        # If the digits are different:
        if number[i] != number[j]:
            # If the lower-power digit is greater than the higher-power digit:
            if int(number[j]) > int(number[i]):
                if number[j-1]!='9':
                    number[j - 1] = str(int(number[j - 1]) + 1)
                    number[j] = number[i]
                else:
                    number = list(str(int(''.join(number[:j]))+1))+number[j:]
            else:
                number[j] = number[i]
        i += 1
        j -= 1
    # Concatenate and return the result.
    return "".join(number)
4

要检查一个数字是否是回文数,其实不需要把它转换成数字。实际上,如果你直接检查这个数字的字符串形式,会简单很多。

>>> i = '212'
>>> i == i[::-1]
True
>>> i = '210'
>>> i == i[::-1]
False

利用这一点,创建一个函数:

def is_palindrome(foo):
   return str(foo) == str(foo)[::-1]

接下来,要找到下一个回文数,只需不断加一,直到你的回文检查结果为真。

把这些结合起来,你就得到了:

def is_palindrome(n):
    return str(n) == str(n)[::-1]

n = raw_input('Enter a number: ')
if is_palindrome(n):
   print('Congratulations! {0} is a palindrome.'.format(n))
else:
   n1 = n
   while not is_palindrome(n1):
       n1 = int(n1)+1
   print('You entered {0}, but the next palindrome is {1}'.format(n, n1))

下面是它的工作原理:

$ python t.py
Enter a number: 123
You entered 123, but the next palindrome is 131
$ python t.py
Enter a number: 121
Congratulations! 121 is a palindrome.
4

你的代码有两个问题。

1) 你的“for i in range”循环是用来计算temp变量的反转,但你并没有改变temp变量的值。

你做的是:

 new_temp = temp
 for i in range(new_temp,new_temp+10):
    [SNIP]
    if(new_temp != new_reverse):
         temp = new_temp+1 #this value never changes.

所以你实际上是用同一个值进行了10次循环。

2) 10次循环可能不够找到一个回文数。要继续循环,直到找到一个回文数为止。

有效的代码是:

def reverse(num):
    reverse= 0
    while num:
        reverse= reverse*10 + num%10
        num= num//10
    return reverse

num= int(input("Enter any number :- "))
if num==reverse(num):
    print ("Already palindrome.")
else:
    while True:
        num+= 1
        if num==reverse(num):
            print ("Next palindrome is : %s"%num)
            break

撰写回答