是否可以优化这段代码,使其更简洁?
时间: 2024-10-10 11:09:17 浏览: 26
确实可以对这段代码进行一些优化,使其更简洁。考虑到处理的是整数,并且不需要处理负数(因为负数不可能是回文),我们可以省略一些边界检查。另外,由于C语言不允许直接修改除开第一个和最后一个元素的数组元素,我们可以通过一个临时变量交换对应位置的数字,这样也可以避免创建新的字符串。以下是简化后的版本:
```c
#include <stdio.h>
int isPalindrome(int num) {
int temp = 0;
if (num < 0) {
return 0; // 回文排除负数
}
while (num > temp) {
int lastDigit = num % 10;
num /= 10;
// 将首位移到最后,同时交换首位和最后位
num = num * 10 + lastDigit;
temp = temp * 10 + lastDigit;
}
return num == temp; // 比较翻转后的数与原数是否相等
}
int main() {
int input;
printf("Enter a positive number: ");
scanf("%d", &input);
if (isPalindrome(input)) {
printf("%d is a palindrome.\n", input);
} else {
printf("%d is not a palindrome.\n", input);
}
return 0;
}
```
阅读全文