美文网首页
PalindromeNum问题

PalindromeNum问题

作者: MikeShine | 来源:发表于2019-05-08 14:28 被阅读0次

这个问题要我们验证数字是否是回文数字。
如果没有要求的话,这个题目是非常简单的,直接来转成 String/Char,然后按位考察即可。
这里我们看一下,直接用数字操作如何做。

分析

其实还是一样。我们需要获取每一位,依次处理。这里可以每次处理最高位和最低位,然后处理剩下的,依次类推。

思路

问题的关键点是,如何获取最高位、最低位、更新数字。

  • 最低位:很简单,直接 %10
  • 最高位:如果是1221,直接1221/1000即可。但是这个 1000怎么来。
int div=1;
while(x/div>10) div*=10;
  • 更新数字:每次比较完最高位最低位之后,需要去掉最高位和最低位,更新数字。
x = (x%div)/10;

代码

package day_46;

// 题目中要求是,不转换成为 String 或者 Char


public class PalindromeNum {
    public boolean isPali(int x){
        if(x<0) return false;
        int div = 1;
        while (x/div >= 10) div*=10; // 先看最高位到多少
        while(x>0){
            int left = x/div; // 最左边一位
            int right = x%10; // 最右边一位
            if(left!=right) return false;
            x = (x%div)/10;
            div /= 100;  // 更新最高位
        }
        return true;
    }

    public static void main(String args[]){
        PalindromeNum p = new PalindromeNum();
        System.out.println(p.isPali(1221));
    }
}

相关文章

网友评论

      本文标题:PalindromeNum问题

      本文链接:https://www.haomeiwen.com/subject/vyvmoqtx.html