如何找到最近的回文数?

问题描述 投票:2回答:7

好吧,我试图用Java编写一个程序来查找回文,有人要求我在其中添加一个转折,而这种转折就是这样,我们必须找出数字是否为回文数,否则就必须找到最近的回文数。例如,如果输入的数字是37,那么有两个数字可以回文,靠近它的一个是33,另一个是44,但是更接近的是33,所以这里的答案是33。我尝试了很多,但是没有成功:(

import java.io.*;  
public class NearestPalindrome {  
static int i,j,n,m,f,r=0,g,p1,p2,c1=0,c2=0,a;  
static boolean k;  
public static void main (String []agrs)throws IOException  
{
   BufferedReader A = new BufferedReader(new InputStreamReader(System.in));  
   System.out.println("This Program Is Created For Checking Whether The Number Entered Is Palindrome, If Not Find The Nearest Palindrome..");  
   System.out.println("Please Enter Number:-");  
   n=Integer.parseInt(A.readLine());
   f=n;  
   NearestPalindrome.Palindrome(f);  
   if(r==f)
   {System.out.println("This Is A Palindrome Number:-"+r);}
   else
   {
       for(i=n;((c1==1)&&(c2==1));i--)
       {
           NearestPalindrome.Palindrome(i);  
           NearestPalindrome.Palindrome(j);  
           if(k=true)  
           { if(r==i)  
           {   p1=i;  
           c1++;  
           }  
           if(r==j)  
               {p2=j;  
               c2++;  
               }  
               }  
           }  
       if((n-p1)>(p2-n))    
       {
        System.out.println("The Nearest Palindrome Is:-"+p2);  
       }  
       else  
        System.out.println("The Nearest Palindrome Is:-"+p1);  

       }  

   }  
public static boolean Palindrome (int x)
{


    for(i=0;x>0;i++)
       {
           m=x%10;
           r=r*10+m;
           x=x/10;   
       }  
    if(n==r)
    {k=true;}
    else
        k=false;
return k;
}  

}

java algorithm palindrome
7个回答
1
投票

这应该使您朝正确的方向前进

public class MyClass {

    public int findNearestPalindrome(int numberEntered) {
        int lowerPalidrome = getLowerPalindrome(numberEntered);
        int higherPalindrome = getHigherPalindrome(numberEntered);
        if (Math.abs(numberEntered - lowerPalindrome) < Math.abs(numberEntered - higherPalindrome) {
            return lowerPalindrome;
        } else {
            return higherPalindrom;
        }
    }

    public int getLowerPalindrome(int baseNumber) {
        for (int i = baseNumber; i > 0; i--) {
            //do logic to find palindrome and return it
        }
    }

    public int getHigherPalindrome(int baseNumber) {
        for (int i = baseNumber; i < LARGE_NUMBER; i++) {
            //do logic to find palindrome and return it
        }
    }
}

3
投票

可以更有效地完成。


0
投票
    import java.util.*;
    import java.lang.*;
    import java.io.*;
    class GFG
     {  public static int findcount(int n)
     {
         int count=0;
         while(n!=0)
         {
             n=n/10;
             count++;
         }
         return count;
     }
public static int findpalindrome(int arr)
 {
     int rem=0,count=0;
    while(arr>0)
    {
        rem=arr%10;
        count=(count*10)+rem;
        arr=arr/10;
    }
     return count;
 }
public static void main (String[] args) 
 {
 //code
 Scanner sc=new Scanner(System.in);
 int test=sc.nextInt();

 while(test-->0)
 { 
    int n=sc.nextInt();
     int res=0,flag=0,flag11=0,j=n+1,i=n-1;
     int aa=0,bb=0;
     if(findcount(n)==1 || (n==findpalindrome(n)) )
        System.out.println(n);
     else
     { 

         for(i=n-1;i>0;i--)
         {

          if(i==findpalindrome(i))
          {    
              aa=i;
              break;
          }  

         }
         while(flag!=1)
         { 
          if(j==findpalindrome(j))
          {    
              bb=j;
              flag=1;
              break;
          }
         j++;  
         } 
       int dif1=Math.abs(n-aa);
       int dif2=Math.abs(n-bb);
       if((dif1==dif2) || (dif1<dif2))
        System.out.println(aa);
       else
       System.out.println(bb);
     }

 }
 }

0
投票

使用带有数组和StringBuilder的基本Java的代码


0
投票

最容易找到最近回文的代码。例如,如果输入为37。到37的最近回文数为33和44。但是差分别为4和7。因此输出为33。如果两种情况下的差均相等,则将打印两个数字。


-1
投票
package com.amit.practice;

public class Test {

    public static void main(String[] args) {
        Test test= new Test();
        int polyNum=test.polydrum(813123);
        System.out.println(polyNum);
    }

    public int polydrum(int number){
        int finalNum=0;
        System.out.println("The given number is :"+number+" ");
        do {
            String revString = "";
            String numString=""+number;
            int numLength=numString.length();

            for(int i=numLength-1;i>=0;i--){
                revString += numString.charAt(i);
                if(numString.equals(revString)){
                    System.out.println("The next polydrum number is :"+numString);
                    finalNum=Integer.parseInt(revString);
                    return finalNum;
                }
            }
            number=number+1;
        } while(finalNum!=number);

        return finalNum;
    }
}

-2
投票

此代码是通过使用NearestPalindrome(int号)方法来查找NEAREST回文号,而其他方法是使用nextPalindrome(int号)来查找NEXT回文号。

© www.soinside.com 2019 - 2024. All rights reserved.