题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
程序分析
判断一个5位数是否为回文数,即要判断其各位数字是否对称。可以通过将数字转换成字符串进行比较,或者使用数学运算反转数字进行比较。
解题思路
方法1: 字符串比较
- 将输入的5位数转换为字符串。
- 通过字符串的索引,比较对应位置的数字是否对称。
方法2: 数学运算比较
- 使用数学运算将输入的5位数进行反转。
- 比较反转后的数与原数是否相等。
方法3: 数学运算比较(只反转一半)
- 只反转输入的5位数的前半部分(高位数字),然后与后半部分(低位数字)进行比较。
- 比较两部分是否相等。
实现代码及优缺点
方法1: 字符串比较
public class PalindromeString {
public static void main(String[] args) {
int num = 12321; // Example 5-digit number
String numStr = String.valueOf(num);
int length = numStr.length();
boolean isPalindrome = true;
for (int i = 0; i < length / 2; i++) {
if (numStr.charAt(i) != numStr.charAt(length - 1 - i)) {
isPalindrome = false;
break;
}
}
System.out.println(num + " is a palindrome: " + isPalindrome);
}
}
优点:
- 简单直观,易于理解和实现。
缺点:
- 需要将整数转换为字符串,可能引入额外的开销。
方法2: 数学运算比较
public class PalindromeMathFull {
public static void main(String[] args) {
int num = 12321; // Example 5-digit number
int originalNum = num;
int reversedNum = 0;
while (num != 0) {
int digit = num % 10;
reversedNum = reversedNum * 10 + digit;
num /= 10;
}
boolean isPalindrome = originalNum == reversedNum;
System.out.println(originalNum + " is a palindrome: " + isPalindrome);
}
}
优点:
- 避免了将整数转换为字符串的开销。
- 使用简单的数学运算。
缺点:
- 需要额外的循环来反转数字。
方法3: 数学运算比较(只反转一半)
public class PalindromeMathHalf {
public static void main(String[] args) {
int num = 12321; // Example 5-digit number
int originalNum = num;
int reversedNum = 0;
while (num > reversedNum) {
int digit = num % 10;
reversedNum = reversedNum * 10 + digit;
num /= 10;
}
// Check if the length of the number is odd or even
// Adjust reversedNum for odd-length numbers
if (num == reversedNum || num == reversedNum / 10) {
System.out.println(originalNum + " is a palindrome.");
} else {
System.out.println(originalNum + " is not a palindrome.");
}
}
}
优点:
- 只需要反转一半数字,减少了循环次数。
缺点:
- 复杂度略高于完全反转数字,但仍然比字符串转换低。
总结推荐
在这种情况下,三种方法都是有效的,选择哪种方法取决于需求和偏好。
- 如果对简洁性和易理解更看重,且不介意额外的字符串转换开销,可以选择方法1(字符串比较)。
- 如果对数学运算更熟悉或更喜欢避免字符串转换,可以选择方法2(完全反转数字)。
- 方法3(反转一半数字)在减少了一半的循环次数的同时,也避免了字符串转换的开销。
推荐根据具体情况选择最适合的方法。若程序的性能对于你的应用很关键,可以进行性能测试来选择最高效的方法。在这个问题中,方法3可能是更好的选择,因为它同时考虑了性能和简洁性。