java中的回文数似乎没有意义

时间:2016-10-15 19:08:15

标签: java

我正在用Java做一些练习课程,并参加了这个回文数字练习,告诉我这个数字是否是回文,我得到了正确的输出但是我试图向自己解释该程序逐行工作,在到达特定行时,我注意到该部分似乎没有加起来,这是代码:

public class Palindrome {

    public static void main(String[] args) {
        int p = 252;
        if(isPalindrome(p)) {
            System.out.println("Palindrome");
        } else {
            System.out.println("Not palindrome");
        }
    }

    public static boolean isPalindrome(int x) {
        int num = x;
        int rev = 0;

        while (num != 0) {
            int rmd = num % 10;//the remainder of 252 is 2
            rev = rev * 10 + rmd;//rev which is 0 multiplied by 10 is 0 + 2 is 2
            num = num / 10;
        }
        if (x == rev) {//x = 252 and rev = 2
            return true;
        }
        return false;
    }
}
部分中的

if(x == rev)当252不等于2时,它怎么可能是真的?谢谢你们..

3 个答案:

答案 0 :(得分:1)

你必须看看循环过程中发生的事情。

对于像这样的简单程序,纸笔方法可以正常工作。对于更复杂的程序,添加"调试打印"帮助您了解正在发生的事情:

int iterationCount = 0;
while (num != 0) {
    System.out.println("Before iteration="+iterationCount+" num="+num+" rev="+rev);
    int rmd = num % 10;//the remainder of 252 is 2
    rev = rev * 10 + rmd;//rev which is 0 multiplied by 10 is 0 + 2 is 2
    num = num / 10;
    System.out.println("After iteration="+iterationCount+" num="+num+" rev="+rev);
    iterationCount++;
}

produces以下输出:

Before iteration=0 num=252 rev=0
After iteration=0 num=25 rev=2
Before iteration=1 num=25 rev=2
After iteration=1 num=2 rev=25
Before iteration=2 num=2 rev=25
After iteration=2 num=0 rev=252
Palindrome

请注意num如何降低到零,而每次迭代rev增长到252

答案 1 :(得分:0)

rev仅在while循环的第一次迭代时为2,在第二次迭代时为25,在第三次迭代rev为252。

if (x == rev) {//x = 252 and rev = 2
    return true;
}
return false;

这种情况也可以简化为:

return x == rev;

答案 2 :(得分:0)

以下是发生的事情:

while (num != 0) {
    int rmd = num % 10; // take the last digit of num
    rev = rev * 10 + rmd; // append it to rev (rev * 10 shifts to the left, and then we add)
    num = num / 10; // remove it from num
}

由于它会在num为零之前重复,rev最终将包含反转的num。那么显然如果反转的数字与原始的x相同,那么它就是一个回文。

嗯,这至少在理论上是这样的。在实践中,该算法存在一个错误:对于大数字(例如任何以3或更大结尾的10位数字),反转将可能溢出。有a much better solution