题目
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
示例 2:
1 2 3
| 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
|
示例 3:
1 2 3
| 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。
|
进阶:
你能不将整数转为字符串来解决这个问题吗?
题目链接
注: 反转回文时需注意数值溢出
标签
个人解答
如题可知单数,负数,0结尾的整数都不是回文数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| function isPalindrome($x) { if ($x < 9 || ($x % 10 === 0)) return false;
$x = (string)$x; $i = 0; $max = strlen($x) - 1; while ($i < $max) { if ($x{$i} == $x{$max}) { $i++; $max--; } else { return false; } }
return true; }
function isPalindrome($x) { if ($x < 9 || ($x % 10 === 0)) return false;
$rev_num = 0; $val = $x; while ($val != 0) { $rev_num = bcmul($rev_num, 10) + ($val % 10); $val = bcdiv($val, 10); }
return ($rev_num === $x); }
function isPalindrome($x) { if ($x < 9 || ($x % 10 === 0)) return false;
$bit = 1; while (9 < bcdiv($x, $bit)) { $bit = $bit * 10; }
while (9 < $x) { $l = bcdiv($x, $bit); $r = $x % 10;
if ($l != $r) return false;
$x = $x % $bit; $x = bcdiv($x, 10); $bit = bcdiv($bit, 100); }
return true; }
|
做题总结
这到题加深了上周做的整数反转所使用的循环技巧。