c++编写一个函数判断一个整数是否是回文数(用数组实现)。如果一个数从正的方向读和从反的方向读的结果相同,则该数就是回文数。例如:66, 676,12321等
时间: 2023-12-03 17:44:52 浏览: 99
下面是一个用数组实现的 C++ 函数,用于判断一个整数是否是回文数:
```cpp
bool isPalindrome(int num) {
// 将整数转换为字符数组
char str[20];
sprintf(str, "%d", num);
int len = strlen(str);
// 依次比较数组的左半部分和右半部分
for (int i = 0; i < len / 2; i++) {
if (str[i] != str[len - i - 1]) {
return false;
}
}
return true;
}
```
该函数首先将整数转换为字符数组,然后从数组的两端开始依次比较字符是否相同,如果有不同的字符,则返回 false,否则返回 true。
相关问题
用c语言编写程序找出所有满足以下特性的6位整数:它是一个完全平方数(完全平方数是指该数是某个整数的平方),该数同时也是回文数(回文数是指该数等于它的反序数)。下面这段代码为什么不对#include <stdio.h> #include <math.h> int inv(int a){ return a%10*100000+a/10%10*10000+a/100*1000+a/1000*100+a/10000*10+a/100000; } int main(){ int arr[1000],huiwen[100]; int i; int n=1,c=0; int d=i*i; for(int i=300;i<1000;i++){ if(d>=100000&&d<1000000) for(n=0;n<1000;n++){ arr[n]=d; while ( inv(int d)=d) huiwen[c]=d; c++; } } printf("%d",arr[1000]); printf("%d,huiwen[100]"); } return 0; }
这段代码存在几个问题:
1. 变量d是在for循环外部定义的,但是在循环内部使用,这样会导致d的值没有更新,程序无法正确运行。
2. 函数inv的实现方式不正确,应该要先计算出每一位数字再进行反转。
3. 在while循环中,条件判断语句应该使用==而不是=,因为=是赋值操作。
4. 数组arr和huiwen的大小都是1000,但是实际上只需要存储满足条件的数,所以应该根据实际需要调整数组大小。
下面是修正后的代码:
```c
#include <stdio.h>
#include <math.h>
int inv(int a){
int b = 0;
while (a > 0){
b = b * 10 + a % 10;
a /= 10;
}
return b;
}
int main(){
int huiwen[100], c = 0;
for(int i = 300; i < 1000; i++){
int d = i * i;
if(d >= 100000 && d < 1000000 && d == inv(d)){
huiwen[c++] = d;
}
}
for(int i = 0; i < c; i++){
printf("%d ", huiwen[i]);
}
return 0;
}
```
这段代码能够找出所有满足条件的6位整数,并且输出这些数。
阅读全文