目标:

回文数判断 如果是回文数就返回true如果不是就返回false

回文数定义:121,从左到右和从右到左读都是一个数。

1.字符串方式,直接反转判断与原来的数是否相同,弊端:如果反转后的数字无限大,那么肯定会把服务器干爆==整型越界问题

public function isPalindrome()
{
    $x = 121;
    if ($x<0) return false;//负数肯定不是回文数
    if ($x!=0&&$x%10==0) return false;//个位是0的数字肯定不是回文数
    return  ($x==strrev($x));
}

2.只反转这个数字的一半,然后和前面的一半进行对比,如果全部相等,那么就是回文数,弊端:需要考虑长度的奇偶性

public function isPalindrome1()
{
    $x = 12345;
    if ($x<0) return false;//负数肯定不是回文数
    if ($x!=0&&$x%10==0) return false;//个位是0的数字肯定不是回文数
    $y=0;
    while($x){//while循环
        $num=$x%10;//求出x除10余多少,也就是得出最后一位数字
        $y=$y*10+$num;//求出最后两位,然后一直循环,直到前半部分的值小于后半部分的值
        $x=floor($x/10);
        if ($x<=$y){//此时前半部分的值已经小于后半部分的值
            break;
        }
    }
    // 长度为偶数,反转后相等;长度为奇数,反转后多一位,奇数的时候就把反转好的最后一位去掉
    return $y == $x || floor($y / 10) == $x;
}