如何找到最近的回文数?
How To Find The Nearest Palindrome Number?
好吧,我试着在 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
}
}
}
请记住,您可以通过多种方式做到这一点。例如,您可以使用 while
循环,而不是 for
循环。希望对您有所帮助!
编辑:如果你真的想压缩代码,我建议你创建一个找到回文的方法,并在两种方法中使用它。
可以更高效地完成。
假设,我们有 N
个数字。让我们找到长度为 N / 2
的前缀。之后,您可以使用 2 个最近的前缀构造 3 个可能的答案,并找到最近的回文(您应该在这里考虑极端情况)。
示例:
号码 123456789
有 1234
个长度为 9/2 = 4
的前缀。最近的前缀:1233
、1235
.
然后我们只构建 3 个候选项:123353321
、123454321
和 123555321
abs(123456789 - 123353321) = 103468
abs(123456789 - 123454321) = 2468
abs(123456789 - 123555321) = 98532
所以最近的回文将是123454321
。
UPD:在这种情况下,您也必须尝试所有可能的中间数字。
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 number)方法找到最近的回文数,其他方法使用nextPalindrome(int number)找到下一个回文数。
package com.amit.palindrome;
public class Palindrome {
public static void main(String[] args) {
Palindrome test= new Palindrome();
int number=135625978;
System.out.println("Given Number is :"+number);
int nearestPolyNum=test.nearestPalindrome(number);
int nextPolyNum=test.nextPalindrome(number);
System.out.println("Nearest Palindrome Number is :"+nearestPolyNum);
System.out.println("Next Palindrome Number is :"+nextPolyNum);
}
public int nextPalindrome(int number){
int nextPoly=0;
if(number>9){
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)){
nextPoly=Integer.parseInt(revString);
return nextPoly;
}
}
number=number+1;
} while(nextPoly!=number);
return nextPoly;
}
return number;
}
public int nearestPalindrome(int number){
if(number>9){
String revString = "";
String numString=""+number;
int nearestPoly=0;
int numLength=numString.length();
String anotherHalfNumber=null;
int halfNum = numLength/2;
String firstHalfNumber=numString.substring(0, halfNum);
if(numLength%2==0){
anotherHalfNumber=numString.substring(halfNum);
}else{
anotherHalfNumber=numString.substring(halfNum+1);
}
for(int i=firstHalfNumber.length()-1;i>=0;i--){
revString += firstHalfNumber.charAt(i);
}
int intAnotherHalfNumber=Integer.parseInt(anotherHalfNumber);
int reverseFirstHalfNumber=Integer.parseInt(revString);
int adjustedNumber = intAnotherHalfNumber-reverseFirstHalfNumber;
nearestPoly = number-adjustedNumber;
return nearestPoly;
}
return number;
}
}
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 的代码
package newPackage;
public class AmazonQn6FindNearestPalindromeNumber {
static int before;
static int after;
public static void main(String[] args) {
System.out.println();
int num=1221;
AmazonQn6FindNearestPalindromeNumber n1=new AmazonQn6FindNearestPalindromeNumber();
before = num-1;
after = num+1;
int[] checkPalindrome= new int[2];
do {
checkPalindrome = n1.checkPalindrome(before, after);
if((checkPalindrome[0] >0)||(checkPalindrome[1] >0)) {
System.out.println("Numbers are");
for(int n:checkPalindrome) {
System.out.println(n);
}
if(checkPalindrome[0]!=0)
System.out.println("Nearest Palindrome is "+checkPalindrome[0]);
if(checkPalindrome[1]!=0)
System.out.println("Nearest Palindrome is "+checkPalindrome[1]);
break;
}
// checkPalindrome = n1.checkPalindrome(before, after);
}while((checkPalindrome[0] ==0)||(checkPalindrome[1] ==0));
}
public int[] checkPalindrome(Integer n, Integer m) {
before = before-1;
after = after+1;
int[] array = new int[2];
String stringn = n.toString();
StringBuilder string1 = new StringBuilder(stringn);
System.out.println(string1);
StringBuilder string2 = string1.reverse();
System.out.println(string2);
if(stringn.equals(string2.toString()))
{
array[0]=n;
System.out.println("Element in n" +array[0]);
}
String stringm = m.toString();
StringBuilder string3 = new StringBuilder(stringm);
System.out.println(string3);
StringBuilder string4 = string3.reverse();
System.out.println(string4);
if(stringm.equals(string4.toString()))
{
array[1]=m;
System.out.println("Element in m" +array[1]);
}
return array;
}
}
查找最近回文的最简单代码。
例如,如果输入是 37。最接近 37 的回文是 33 和 44。但分别是 4 和 7。因此输出为 33。如果两种情况下的差异相等,它将打印两个数字。
package demo;
import java.util.Scanner;
import javax.swing.text.html.FormSubmitEvent;
public class Increment {
public static boolean Plaindrome(int n) {
int r,sum=0,temp;
temp=n;
while(n>0){
r=n%10;
sum=(sum*10)+r;
n=n/10;
}
if(temp==sum)
return true;
else
return false;
}
public static int greaterpalindrome(int k) {
while(!Plaindrome(k)) {
k++;
}
return k;
}
public static int smallerpalindrome(int s) {
while(!Plaindrome(s)) {
s--;
}
return s;}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int value = scan.nextInt();
int greater = greaterpalindrome(value+1);
int smaller = smallerpalindrome(value-1);
if (Math.abs(value-greater)==(value-smaller)) {
System.out.println(greater+" "+smaller);
}
else if (Math.abs(value-greater)>(value-smaller)) {
System.out.println(smaller);
}
else {
System.out.println(greater);
}
} }
试试下面的代码片段:
public class Sample{
public static void main(String[] args) throws InterruptedException {
Scanner scan = new Scanner(System.in);
System.out.print("Enter val: ");
int entry = scan.nextInt();
int entryN = entry;
int entryP = entry;
while(true) {
if (isPolindrom(entry)) {
System.out.println(entry);
break;
} else if (isPolindrom(--entryN)) {
System.out.println(entryN);
break;
} else if (isPolindrom(++entryP)){
System.out.println(entryP);
break;
}
}
System.out.println("Best hakiki mürşit is a science :)");
}
private static boolean isPolindrom(int a) {
int val1 = a;
int last = 0;
int size = String.valueOf(val1).length();
for(int i = size; i > 0 ; i-- ) {
last += (val1 % 10) * (int) Math.pow(10, (i-1));
val1 = (val1 - (val1 % 10)) /10;
}
if (a == last) {
return true;
} else {
return false;
}
}
}
好吧,我试着在 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
}
}
}
请记住,您可以通过多种方式做到这一点。例如,您可以使用 while
循环,而不是 for
循环。希望对您有所帮助!
编辑:如果你真的想压缩代码,我建议你创建一个找到回文的方法,并在两种方法中使用它。
可以更高效地完成。
假设,我们有 N
个数字。让我们找到长度为 N / 2
的前缀。之后,您可以使用 2 个最近的前缀构造 3 个可能的答案,并找到最近的回文(您应该在这里考虑极端情况)。
示例:
号码 123456789
有 1234
个长度为 9/2 = 4
的前缀。最近的前缀:1233
、1235
.
然后我们只构建 3 个候选项:123353321
、123454321
和 123555321
abs(123456789 - 123353321) = 103468
abs(123456789 - 123454321) = 2468
abs(123456789 - 123555321) = 98532
所以最近的回文将是123454321
。
UPD:在这种情况下,您也必须尝试所有可能的中间数字。
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 number)方法找到最近的回文数,其他方法使用nextPalindrome(int number)找到下一个回文数。
package com.amit.palindrome;
public class Palindrome {
public static void main(String[] args) {
Palindrome test= new Palindrome();
int number=135625978;
System.out.println("Given Number is :"+number);
int nearestPolyNum=test.nearestPalindrome(number);
int nextPolyNum=test.nextPalindrome(number);
System.out.println("Nearest Palindrome Number is :"+nearestPolyNum);
System.out.println("Next Palindrome Number is :"+nextPolyNum);
}
public int nextPalindrome(int number){
int nextPoly=0;
if(number>9){
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)){
nextPoly=Integer.parseInt(revString);
return nextPoly;
}
}
number=number+1;
} while(nextPoly!=number);
return nextPoly;
}
return number;
}
public int nearestPalindrome(int number){
if(number>9){
String revString = "";
String numString=""+number;
int nearestPoly=0;
int numLength=numString.length();
String anotherHalfNumber=null;
int halfNum = numLength/2;
String firstHalfNumber=numString.substring(0, halfNum);
if(numLength%2==0){
anotherHalfNumber=numString.substring(halfNum);
}else{
anotherHalfNumber=numString.substring(halfNum+1);
}
for(int i=firstHalfNumber.length()-1;i>=0;i--){
revString += firstHalfNumber.charAt(i);
}
int intAnotherHalfNumber=Integer.parseInt(anotherHalfNumber);
int reverseFirstHalfNumber=Integer.parseInt(revString);
int adjustedNumber = intAnotherHalfNumber-reverseFirstHalfNumber;
nearestPoly = number-adjustedNumber;
return nearestPoly;
}
return number;
}
}
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 的代码
package newPackage;
public class AmazonQn6FindNearestPalindromeNumber {
static int before;
static int after;
public static void main(String[] args) {
System.out.println();
int num=1221;
AmazonQn6FindNearestPalindromeNumber n1=new AmazonQn6FindNearestPalindromeNumber();
before = num-1;
after = num+1;
int[] checkPalindrome= new int[2];
do {
checkPalindrome = n1.checkPalindrome(before, after);
if((checkPalindrome[0] >0)||(checkPalindrome[1] >0)) {
System.out.println("Numbers are");
for(int n:checkPalindrome) {
System.out.println(n);
}
if(checkPalindrome[0]!=0)
System.out.println("Nearest Palindrome is "+checkPalindrome[0]);
if(checkPalindrome[1]!=0)
System.out.println("Nearest Palindrome is "+checkPalindrome[1]);
break;
}
// checkPalindrome = n1.checkPalindrome(before, after);
}while((checkPalindrome[0] ==0)||(checkPalindrome[1] ==0));
}
public int[] checkPalindrome(Integer n, Integer m) {
before = before-1;
after = after+1;
int[] array = new int[2];
String stringn = n.toString();
StringBuilder string1 = new StringBuilder(stringn);
System.out.println(string1);
StringBuilder string2 = string1.reverse();
System.out.println(string2);
if(stringn.equals(string2.toString()))
{
array[0]=n;
System.out.println("Element in n" +array[0]);
}
String stringm = m.toString();
StringBuilder string3 = new StringBuilder(stringm);
System.out.println(string3);
StringBuilder string4 = string3.reverse();
System.out.println(string4);
if(stringm.equals(string4.toString()))
{
array[1]=m;
System.out.println("Element in m" +array[1]);
}
return array;
}
}
查找最近回文的最简单代码。 例如,如果输入是 37。最接近 37 的回文是 33 和 44。但分别是 4 和 7。因此输出为 33。如果两种情况下的差异相等,它将打印两个数字。
package demo;
import java.util.Scanner;
import javax.swing.text.html.FormSubmitEvent;
public class Increment {
public static boolean Plaindrome(int n) {
int r,sum=0,temp;
temp=n;
while(n>0){
r=n%10;
sum=(sum*10)+r;
n=n/10;
}
if(temp==sum)
return true;
else
return false;
}
public static int greaterpalindrome(int k) {
while(!Plaindrome(k)) {
k++;
}
return k;
}
public static int smallerpalindrome(int s) {
while(!Plaindrome(s)) {
s--;
}
return s;}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int value = scan.nextInt();
int greater = greaterpalindrome(value+1);
int smaller = smallerpalindrome(value-1);
if (Math.abs(value-greater)==(value-smaller)) {
System.out.println(greater+" "+smaller);
}
else if (Math.abs(value-greater)>(value-smaller)) {
System.out.println(smaller);
}
else {
System.out.println(greater);
}
} }
试试下面的代码片段:
public class Sample{
public static void main(String[] args) throws InterruptedException {
Scanner scan = new Scanner(System.in);
System.out.print("Enter val: ");
int entry = scan.nextInt();
int entryN = entry;
int entryP = entry;
while(true) {
if (isPolindrom(entry)) {
System.out.println(entry);
break;
} else if (isPolindrom(--entryN)) {
System.out.println(entryN);
break;
} else if (isPolindrom(++entryP)){
System.out.println(entryP);
break;
}
}
System.out.println("Best hakiki mürşit is a science :)");
}
private static boolean isPolindrom(int a) {
int val1 = a;
int last = 0;
int size = String.valueOf(val1).length();
for(int i = size; i > 0 ; i-- ) {
last += (val1 % 10) * (int) Math.pow(10, (i-1));
val1 = (val1 - (val1 % 10)) /10;
}
if (a == last) {
return true;
} else {
return false;
}
}
}