用C++实现不使用数组实现回文数的判断,不要用函数
时间: 2024-03-01 19:54:49 浏览: 66
cpp代码-(一维数组/动态存储)判断一个数是否为回文数,即正读反读都一样的数。
可以使用指针来实现不使用数组判断回文数,具体实现如下:
```c++
#include <iostream>
using namespace std;
int main() {
int num;
cin >> num;
int temp = num;
int digit = 0;
while (temp > 0) {
temp /= 10;
digit++;
}
int left = 1;
int right = 1;
for (int i = 1; i < digit; i++) {
left *= 10;
right *= 10;
}
if (digit % 2 == 0) {
right /= 10;
}
int* leftPtr = &left;
int* rightPtr = &right;
bool isPalindrome = true;
while (*leftPtr < *rightPtr) {
int leftDigit = (num / (*leftPtr)) % 10;
int rightDigit = (num / (*rightPtr)) % 10;
if (leftDigit != rightDigit) {
isPalindrome = false;
break;
}
*leftPtr *= 10;
*rightPtr /= 10;
}
if (isPalindrome) {
cout << num << " is a palindrome" << endl;
} else {
cout << num << " is not a palindrome" << endl;
}
return 0;
}
```
首先,我们需要计算出需要比较的数字的位数 `digit`,然后使用 `left` 和 `right` 记录最左边和最右边的数字的位置,初始值都是 1,然后根据数字的位数,分别乘以 10,直到乘以 `digit-1` 次,得到最左边和最右边的数字的位置。如果数字的位数是偶数,我们将 `right` 除以 10,因为中间的数字不需要比较。
接下来,我们使用指针 `leftPtr` 和 `rightPtr` 分别指向 `left` 和 `right`,通过指针来移动 `left` 和 `right` 的位置,同时比较对应位置上的数字是否相等,如果有不相等的情况,说明该数字不是回文数。
最后,根据比较的结果输出判断结果即可。
阅读全文