为什么这段判断回文数的C语言代码无法正常运行?
回文数判断代码的问题分析与修复
你的代码之所以判断错误,核心原因是反转数字的过程中把原始输入的n给改没了。
看这段循环逻辑:
while (n!=0){ rem = n % 10; rev = rev * 10 + rem; n = n / 10; }
每次循环都会把n除以10,直到n变成0才停止循环。这时候你再用rev == n做判断,相当于拿反转后的数字和0比,除非你输入的是0,否则永远不会相等,自然会错误判定为非回文数。
修复方法很简单:提前把原始输入的数字存到另一个变量里,比如original,最后拿反转后的rev和original比较就行。
修正后的完整代码:
#include<stdio.h> int main(){ int n, original, rev = 0, rem; printf("enter number: "); scanf("%d", &n); original = n; // 保存原始输入的数字 while (n != 0){ rem = n % 10; rev = rev * 10 + rem; n = n / 10; } if (rev == original) { printf("Number is a palindrome"); } else { printf("Number is not a palindrome"); } return 0; }
内容的提问来源于stack exchange,提问作者jay sahay
相关产品推荐
相关产品推荐

