回文数判断需先排除负数和末尾为0的正整数;0是回文数;用long long反转数字防溢出,通过取余和整除逐位重建逆序数后与原数比较。

回文数判断的核心思路:逆序重建原数
直接反转数字再比较,比转字符串更高效且符合题目约束。关键在于避免溢出和正确处理末尾为0的数(如10、100)——这类数不是回文,但反转后会丢失前导零,导致误判。
-
0是回文数;负数直接返回false - 末尾为
0的正整数(即n % 10 == 0 && n != 0)一定不是回文,可提前返回false - 用
long long存储反转结果,防止int溢出(例如2147483647反转后超INT_MAX)
手动反转数字的循环写法
每次取原数末位 n % 10,加到结果末尾:reversed = reversed * 10 + digit,然后 n /= 10。循环直到 n == 0。
bool isPalindrome(int n) {
if (n <h3>优化:只反转一半,避免 long long 依赖</h3><p>真正只需要反转后半部分,再与前半部分比较。这样能规避 <code>long long</code>,也减少迭代次数。注意奇数位时,反转部分要除以10再比对(中间那位不用参与比较)。</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/gongju/2823" title="C++14"><img
src="https://img.php.cn/upload/manual/001/431/639/6ac8b33c327c4749.png" alt="C++14" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/gongju/2823" title="C++14" class="overflowclass">C++14</a>
<p class="overflowclass">C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。</p>
</div>
<a rel="nofollow" href="/xiazai/gongju/2823" title="C++14" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
- 循环条件是
n > reversed,当n 时停止 - 退出后,若原数长度为奇数,
reversed / 10 == n;偶数则reversed == n - 示例:
1221→ 最终n == 12,reversed == 12;12321→n == 12,reversed == 123,所以用reversed / 10 == 12
边界测试必须覆盖的几个数
不光测 121 或 12321 这类典型值,这几个容易漏掉:
-
0:应返回true -
10、100:应返回false(提前拦截逻辑是否生效) -
INT_MAX(2147483647):反转后是7463847412,远超int范围,验证是否用了足够大的类型或半反转逻辑 -
123210:末位为0但非零数,必须在开头就return false
半反转法虽省空间,但判断奇偶位的分支容易写错;全反转法逻辑直白,但得小心溢出——选哪个取决于你更在意可读性还是内存占用。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!










