Java 寻找下一个回文的代码 - 输出错误
Java code for finding the next palindrome - Error in output
题目是求给定数后最小的回文整数
输入整数个数即测试用例
输入数组中的整数。
- 输出:数组中每个整数分别对应的下一个回文整数。
有多种方法可以解决这个问题(SO 上也有很多解决方案),但我不明白为什么我无法从这段代码中获取输出。从 运行 多次代码中,我得出结论,如果任何测试用例需要超过 1 个增量才能成为回文,程序就会以某种方式进入无限循环。
例如。如果我输入 100 作为测试用例,输出是 101.Similarly,如果我输入 908,我得到 909 作为输出。但是如果我输入 108,我不会得到 111 作为输出。
请原谅我的愚蠢错误,我是 Java 中的编码新手。谢谢
import java.util.Scanner;
class nextPalindrome {
public static void nextPalindromeGenerate(int n)
{
int flag=1;
int digit; //to store the mod value
int rev=0; //reverse of the number
int original; //dummy to store the original number
if(n<10)
{ System.out.println(n+1); //If number is single digit, next smallest palindrome is n+1
flag=0;
}
while(flag!=0)
{ ++n;
original=n;
while(n>0) //loop for reversing the number
{
digit=n%10;
rev=rev*10+digit;
n=n/10;
}
if(rev==original) //check if original equals the reverse(original)
{
System.out.println(rev);
flag=0;
}
else flag=1;
}
}
public static void main(String[] args)
{
@SuppressWarnings("resource")
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] palinList=new int[n];
for(int i=0;i<n;i++)
{
palinList[i]=sc.nextInt();;
}
for(int j=0;j<n;j++)
{
nextPalindromeGenerate(palinList[j]);
}
}
}
您将 n
增加到下一个整数以测试是否为回文 (!),将其保存在 origingal
中,然后丢弃 n
以查看它是否是回文。但是您永远不会为下一次迭代重置 n
。
这个问题非常微不足道,只是将 rev、digit 和 n 重置为有意义的值。工作程序如下:
import java.util.Scanner;
class nextPalindrome {
public static void nextPalindromeGenerate(int n)
{
int flag=1;
int digit; //to store the mod value
int rev=0; //reverse of the number
int original; //dummy to store the original number
if(n<10)
{ System.out.println(n+1); //If number is single digit, next smallest palindrome is n+1
flag=0;
}
original=n;
while(flag!=0)
{ rev=0;digit=0;
n=++original;
while(n>0) //loop for reversing the number
{
digit=n%10;
rev=rev*10+digit;
n=n/10;
}
if(rev==original) //check if original equals the reverse(original)
{
System.out.println(original);
flag=0;
}
else flag=1;
}
}
public static void main(String[] args)
{
@SuppressWarnings("resource")
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] palinList=new int[n];
for(int i=0;i<n;i++)
{
palinList[i]=sc.nextInt();;
}
for(int j=0;j<n;j++)
{
nextPalindromeGenerate(palinList[j]);
}
}
}
题目是求给定数后最小的回文整数
输入整数个数即测试用例
输入数组中的整数。
- 输出:数组中每个整数分别对应的下一个回文整数。
有多种方法可以解决这个问题(SO 上也有很多解决方案),但我不明白为什么我无法从这段代码中获取输出。从 运行 多次代码中,我得出结论,如果任何测试用例需要超过 1 个增量才能成为回文,程序就会以某种方式进入无限循环。 例如。如果我输入 100 作为测试用例,输出是 101.Similarly,如果我输入 908,我得到 909 作为输出。但是如果我输入 108,我不会得到 111 作为输出。
请原谅我的愚蠢错误,我是 Java 中的编码新手。谢谢
import java.util.Scanner;
class nextPalindrome {
public static void nextPalindromeGenerate(int n)
{
int flag=1;
int digit; //to store the mod value
int rev=0; //reverse of the number
int original; //dummy to store the original number
if(n<10)
{ System.out.println(n+1); //If number is single digit, next smallest palindrome is n+1
flag=0;
}
while(flag!=0)
{ ++n;
original=n;
while(n>0) //loop for reversing the number
{
digit=n%10;
rev=rev*10+digit;
n=n/10;
}
if(rev==original) //check if original equals the reverse(original)
{
System.out.println(rev);
flag=0;
}
else flag=1;
}
}
public static void main(String[] args)
{
@SuppressWarnings("resource")
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] palinList=new int[n];
for(int i=0;i<n;i++)
{
palinList[i]=sc.nextInt();;
}
for(int j=0;j<n;j++)
{
nextPalindromeGenerate(palinList[j]);
}
}
}
您将 n
增加到下一个整数以测试是否为回文 (!),将其保存在 origingal
中,然后丢弃 n
以查看它是否是回文。但是您永远不会为下一次迭代重置 n
。
这个问题非常微不足道,只是将 rev、digit 和 n 重置为有意义的值。工作程序如下:
import java.util.Scanner;
class nextPalindrome {
public static void nextPalindromeGenerate(int n)
{
int flag=1;
int digit; //to store the mod value
int rev=0; //reverse of the number
int original; //dummy to store the original number
if(n<10)
{ System.out.println(n+1); //If number is single digit, next smallest palindrome is n+1
flag=0;
}
original=n;
while(flag!=0)
{ rev=0;digit=0;
n=++original;
while(n>0) //loop for reversing the number
{
digit=n%10;
rev=rev*10+digit;
n=n/10;
}
if(rev==original) //check if original equals the reverse(original)
{
System.out.println(original);
flag=0;
}
else flag=1;
}
}
public static void main(String[] args)
{
@SuppressWarnings("resource")
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] palinList=new int[n];
for(int i=0;i<n;i++)
{
palinList[i]=sc.nextInt();;
}
for(int j=0;j<n;j++)
{
nextPalindromeGenerate(palinList[j]);
}
}
}