一、题目描述:
有这样一类数字,他们顺着看和倒着看是相同的数,例如:121,656,2332等,这样的数字就称为:回文数字。编写一个函数,判断某数字是否是回文数字。public String isPalindrome(long num);
二、 算法分析
要实现回文数的判定,其核心就是字符串翻转后值相同,一说这大家立马回想到stringbuffer中的reverse方法。是的,没有这个方法可以实现这个功能。
在此介绍另一种方法,相对来说思想比较复杂。
1> 初始化一个变量 reverlong为o,用来记录从新生成的数字。
2> 如果输入的nunber不为零,则reverlong = reverlong * 10 + number % 10. 然后把number = number /10;
这个语句意思是前面的reverlong为nunber取余后的低位数字,number /10 位 次高位
比如 : 1221 (从左到右, 标记位数为 4321 )
第一趟 while: reverlong = 0 * 10 + 1221 % 10 = 1 (最低位 1 )
第二趟: reverlong = 1 * 10 + 122 % 10 = 12 (1,2 位)
三、算法:
方法一、
private boolean isPalindrome(long num) { boolean flag; String numStr = Long.toString(num); StringBuffer sb = new StringBuffer(numStr); String resultStr =sb.reverse().toString(); if (resultStr.equals(numStr)) { flag = true; } else { flag = false; } return flag; }
private boolean isPalindrome2(long num) { boolean flag = false; long temp = num; long reverlong = 0l; while (num != 0) { reverlong = reverlong * 10 + num % 10; num = num / 10; } if(temp == reverlong) { flag = true; } return flag; }
package com.albertshao.csi.interview; /** * @author albertshao * */ public class Main4_1 { public static void main(String[] args) { Main4_1 m = new Main4_1(); System.out.println("method 2: " + m.isPalindrome2(1221)); System.out.println("method 1 : " + m.isPalindrome(2332)); } private boolean isPalindrome(long num) { boolean flag; String numStr = Long.toString(num); StringBuffer sb = new StringBuffer(numStr); String resultStr =sb.reverse().toString(); if (resultStr.equals(numStr)) { flag = true; } else { flag = false; } return flag; } private boolean isPalindrome2(long num) { boolean flag = false; long temp = num; long reverlong = 0l; while (num != 0) { reverlong = reverlong * 10 + num % 10; num = num / 10; } if(temp == reverlong) { flag = true; } return flag; } }
method 2: true method 1 : true