我正在尝试编写一个C ++程序来查找数字是否为回文。这是我的代码。问题是,即使数字是回文,程序也会返回false。
#include <cstdlib>
#include <iostream>
#include <string>
bool is_palindrome(int n){
std::string num = std::to_string(n);
int len = num.length();
bool check = false;
for(int i=0; i < len/2; i++){
if(num[i] == num[len-i])
check = true;
}
return check;
}
int main(){
int num = 23232;
std::cout<< is_palindrome(num) << std::endl;
return 0;
}
我缺少什么逻辑。
答案 0 :(得分:7)
num数组的最大索引是len - 1
而不是len
。所以使用:
if (num[i] == num[len - 1 - i])
将第一个数组索引与最后一个数组索引进行比较,依此类推。
还有另一个错误,因为is_palindrome()
将返回true
即使有一个巧合(即如果任何2个索引匹配则返回true
)。因此,当checked
变为true
时,它再也不会变为false
。
您最终可以更改为:
for (int i = 0; i < len/2; i++)
if (num[i] != num[len - 1 - i])
return false;
return true;