这个系列是完成《程序员的算法趣题》这本书的习题,奈何这本书没有给出Java版本的代码,所以决定自己动手做,也好回顾忘掉的知识。不足之处,请多指教。
题目如上所示:
public class TestOne {
public static void main(String[] args) {
long start = System.currentTimeMillis();
int x = 11;
while ( x > 10 ){
if ( TestOne.checkNumber(String.valueOf(x)) && TestOne.checkNumber(Integer.toBinaryString(x))
&& TestOne.checkNumber(Integer.toOctalString(x))){
break;
}
x++;
}
long end = System.currentTimeMillis();
System.out.println("这个所求的数是: " + x);
System.out.println("所耗费的时间是: " + (end-start) + "毫秒");
}
// 判断一个数字是否为回文数
public static boolean checkNumber(String arg){
char[] nums = String.valueOf(arg).toCharArray();
int length = nums.length;
for (int i = 0; i < length / 2; i++){
char temp = nums[length-i-1];
nums[length-i-1] = nums[i];
nums[i] = temp;
}
if( String.valueOf(arg).equals(String.valueOf(nums))){
return true;
}else {
return false;
}
}
}
值得注意的点:
- && 和 & 的区别,&&具有短路功能,当某个数十进制时不为回文数时就不用判断后面的了,虽然判断的语句有些厂,但是用新的值将其结果接收再拿进来判断会增加开销。
- Java中有实现好的方法,在Integer中存在方法Integer.toBinaryString(),Integer.toOctalString()还有十六进制的转换方法Integer.toHexString()。
- 判断一个数是否为回文数时,较为简单的方法是将该数组的首尾各对应的位置直接对换,无论数组中的元素为基数还是偶数。