所以我必须编写一个程序,找到给定范围之间的所有回文数。 程序必须使用numDigits()方法,该方法接受一个int数并返回该int的位数。
一个isPalindrome()方法,它将采用一个int数字,并返回一个布尔值true或false,无论该数字是否为回文
我在这里编码了numDigit()方法:
public static int getNumDigits(int numCount, int END)
{
//local variables
int numDigits;
numDigits = 0;
while(numCount <= END)
{
numDigits = (int)(Math.log10(numCount)+1);
if(num == 0)
{
numDigits = 1;
}
numCount++;
}//end of minor loop
return numDigits;
}// numDigit Method
我确实知道如何以另一种方式找到回文,但这项任务特定于此技术。 如何实现此numDigit()方法以查找范围之间给出的所有回文数?
答案 0 :(得分:1)
如果该数字是回文,您需要知道要查找的位数,如此算法所示:
将它分成两半,检查它是否是回文。
public static boolean isPalindrome(int number) {
//convert number to string for easy processing
String num = Integer.toString(number);
// count number of digits in number
int digitCount = numDigits(number);
// if number has odd number of digit
if (digitCount % 2 == 1) {
// remove middle digit
num = num.substring(0, Math.floorDiv(digitCount, 2)) + num.substring(Math.floorDiv(digitCount, 2) + 1);
// since you removed a digit, the number of digits is one less
digitCount = digitCount - 1;
}
// split number in half
String half1 = num.substring(0, digitCount / 2);
String half2 = num.substring(digitCount / 2);
// check if two halves are same
for (int i = 0, j = half2.length() - 1; i < half1.length() && j >= 0; i++, j--) {
if(half1.charAt(i)!=half2.charAt(j)){
return false;
}
}
return true;
}