回文數:正讀反讀都一樣的整數,如 121, 12321, 4554。
原始代碼邏輯較繁瑣,核心思想:
count。修正版簡潔實現:
#include
#include
bool isPalindromeMath(long num) {
if (num < 0) return false; // 負數通常不視為回文
if (num < 10) return true; // 單位數
long reversed = 0;
long original = num;
while (num > 0) {
reversed = reversed * 10 + num % 10;
num /= 10;
}
return original == reversed;
}
int main() {
long n;
printf("Enter a number: ");
scanf("%ld", &n);
printf("%ld %s a palindrome.\n", n, isPalindromeMath(n) ? "is" : "is not");
return 0;
}
優點:O(log n) 時間,O(1) 空間,無溢出風險(若用 long long 存儲反轉值)。
bool isPalindromeStr(long num) {
char buf[32];
int len = sprintf(buf, "%ld", num);
for (int i = 0, j = len - 1; i < j; i++, j--) {
if (buf[i] != buf[j]) return false;
}
return true;
}
優點:代碼簡潔,天然處理負號(sprintf 會輸出 -,導致非回文,符合預期)。
if(count%2==0) yes=0; 錯誤地認為偶數位不可能是回文。bigsum/smallsum 次方,易出錯且效率低。smallnum = smallnum/=10; 含未定義行為(C 標準不保證賦值副作用順序)。面試與工程中首選數學反轉法或雙指針字符串法,邏輯清晰、邊界處理簡單。避免手工展開位運算除非有特殊性能要求。