2016-04-01 5 views
-1

Я написал фрагмент кода для домашней работы в классе. Однако я думал, что это довольно долго! Есть ли более оптимизированный способ сделать это?Как проверить, является ли число палиндром?

String text = input.readLine(); 
int num = (text.length())/2; 
double letter = (double)(text.length())/2; 
String s1 = text.substring(0,num); 
int u1 = Integer.parseInt(s1);  

if (letter%1==0) {   
    StringBuffer s2 = new StringBuffer(text.substring(num)); 
    s2 = s2.reverse(); 
    String t2 = s2.toString(); 
    int u2 = Integer.parseInt(t2); 
    if (u1==u2) { 
     System.out.println("Palindrome"); 
    } else { 
     System.out.println("FAIL"); 
    } 
} else { 
    StringBuffer s2 = new StringBuffer(text.substring(num+1)); 
    s2= s2.reverse(); 
    String t2 = s2.toString(); 
    int u2 = Integer.parseInt(t2); 
    if (u1==u2) { 
     System.out.println("Palindrom"); 
    }else { 
     System.out.println("FAIL"); 
    } 
} 
+1

Возможный дубликат [Контрольная строка для палиндром] (HTTP: //stackoverflow.com/questions/4138827/check-string-for-palindrome) –

+0

Взгляните на мой ответ. Я показал два метода проверки палиндрома. И не забудьте отметить это как [принято] (http://stackoverflow.com/help/accepted-answer), это помогло вам, щелкнув по пустому тику рядом с ответом :) Принятие дает вам репутацию. Если вы не принимаете никакого ответа, люди могут неохотно отвечать на ваши будущие вопросы. –

ответ

0

Ваш код работает, но обработки чисел поразрядно проще и более удобным для чтения:

public static boolean isPalindromic(String num) { 
    for(int i = 0, len = num.length() ; i < len/2 ; i++) { 
     if(num.charAt(i) != num.charAt(num.charAt(len-i-1))) return false; 
    } 

    return true; 
} 
1

Вам не нужно, чтобы преобразовать строку обратно на номер, чтобы сравнить их. Вы можете использовать метод string equals(), чтобы проверить, равны ли они. Проверьте это (с необходимыми изменениями это будет работать для любой строки, но не только для чисел).

int num = 12300321; 
String numString = String.valueOf(num); 
String reverseNumString = new StringBuilder(numString).reverse().toString(); 

if(numString.equals(reverseNumString)) { 
    System.out.println(num + " is a Palindrome!"); 
} 
else { 
    System.out.println(num + " is not a Palindrome!"); 
} 

Выход:

12300321 is a Palindrome! 

Альтернативный метод (с использованием только манипуляция номер, будет работать только для целых чисел)

int num = 12300321; 
int numCopy = num; 
int reverseNumInt = 0; 

while(numCopy != 0) { 
    reverseNumInt = reverseNumInt * 10 + numCopy % 10; 
    numCopy /= 10; 
} 
if(reverseNumInt == num) { 
    System.out.println(num + " is a Palindrome!"); 
} 
else { 
    System.out.println(num + " is not a Palindrome!"); 
} 
Смежные вопросы