使用数字位数找到给定范围之间的回文数

时间:2015-11-19 00:06:26

标签: java loops palindrome

所以我必须编写一个程序,找到给定范围之间的所有回文数。 程序必须使用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()方法以查找范围之间给出的所有回文数?

1 个答案:

答案 0 :(得分:1)

如果该数字是回文,您需要知道要查找的位数,如此算法所示

  1. 计算数字中的位数。
  2. 如果数字的位数为奇数,请删除中间数字,使数字为偶数。
  3. 将它分成两半,检查它是否是回文。

    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;
    }