C ++中的回文数

时间:2015-02-17 23:44:18

标签: c++ c++11

我正在尝试编写一个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;

}

我缺少什么逻辑。

1 个答案:

答案 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;