目标:
回文数判断 如果是回文数就返回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; }