The Next Palindrome number

前端 未结 11 1814
走了就别回头了
走了就别回头了 2021-01-17 07:23

I am beginner in programming, So can you please tell me what\'s wrong with my code?

I want to print next palindrome number if the number entered by the user (n) is n

11条回答
  •  失恋的感觉
    2021-01-17 07:43

    I have written this for finding next pallindrome number given a pallindrome number.. #given a pallindrome number ..find next pallindrome number input=999 inputstr=str(input)

    inputstr=inputstr
    #append 0 in beginning and end of string ..in case like 99 or 9999
    inputstr='0'+inputstr+'0'
    length=len(inputstr)
    halflength=length/2;
    #if even length
        if(length%2==0):
        #take left part and reverse it(which is equal as the right part )
        temp=inputstr[:length/2]
        temp=temp[::-1]
        #take right part of the string ,move towards lsb from msb..If msb is 9 turn it to zero and move ahead
        for j,i in enumerate(temp):
            #if number is not 9 then increment it and end loop
            if(i!="9"):
                
                substi=int(i)+1
                temp=temp[:j]+str(substi)+temp[j+1:]
                break;
            else:
                
                temp=temp[:j]+"0"+temp[j+1:]
        #now you have right hand side...mirror it and append left and right part
        output=temp[::-1]+temp
    #if the length is odd
        if(length%2!=0 ):
        #take the left part with the mid number(if length is 5 take 3 digits
            temp=inputstr[:halflength+1]
        #reverse it
            temp=temp[::-1]
        #apply same algoritm as in above
        #if 9 then make it 0 and move on
        #else increment number and break the loop
            for j,i in enumerate(temp):
            
                if(i!="9"):
                
                    substi=int(i)+1
                    temp=temp[:j]+str(substi)+temp[j+1:]
                    break;
                else:
                
                    temp=temp[:j]+"0"+temp[j+1:]
        #now the msb is the middle element so skip it and copy the rest
            temp2=temp[1:]
        #this is the right part mirror it to get left part then left+middle+right isoutput
            temp2=temp2[::-1]
            output=temp2+temp
        print(output)
    
    
        
    

    similarly for this problem take the left part of given number ...reverse it..store it in temp

      inputstr=str(number)
        if(inputstr==inputstr[::-1])
            print("Pallindrome")
        else:
            temp=inputstr[:length/2]
            temp=temp[::-1]
            for j,i in enumerate(temp):
                    
                    if(i!="9"):
                    
                        substi=int(i)+1
                        temp=temp[:j]+str(substi)+temp[j+1:]
                        break;
                    else:
                    
                        temp=temp[:j]+"0"+temp[j+1:]
        now depending on length of your number odd or even generate the output..as in the code
        if even then output=temp[::-1]+temp
        if odd then  temp2=temp1[1:]
                     output=temp2[::-1]+temp
    
        
    

    I am not sure about this solution..but hope it helps

提交回复
热议问题