好吧,我试图用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;
}
}
这应该使您朝正确的方向前进
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
}
}
}
可以更有效地完成。
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);
}
}
}
使用带有数组和StringBuilder的基本Java的代码
最容易找到最近回文的代码。例如,如果输入为37。到37的最近回文数为33和44。但是差分别为4和7。因此输出为33。如果两种情况下的差均相等,则将打印两个数字。
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;
}
}
此代码是通过使用NearestPalindrome(int号)方法来查找NEAREST回文号,而其他方法是使用nextPalindrome(int号)来查找NEXT回文号。