Нахождение числа палиндрома между заданным диапазоном, используя количество цифр

Поэтому я должен написать программу, которая найдет все числа палиндрома между заданным диапазоном. Программа должна использовать метод 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 ответ

Вам нужно знать количество цифр, чтобы узнать, является ли число палиндромом, как показано в этом алгоритме:

  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;
    }
    
Другие вопросы по тегам