用C ++检查回文数

时间:2013-07-12 00:10:46

标签: c++

我正在尝试使用C ++来解决Project Euler problem 4

我想把每个数字放到一个数组中,看看元素的值是否在正确的位置是相同的。这就是我到目前为止所做的:

int digits[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

但是我不能写代码。我怎样才能拿出这个数字并让它看起来那样? 我知道C ++(循环和指针)的基础知识。 如何在C ++中使用可调整数组,我应该使用它吗? 我也不知道数组的大小应该是多少。 还有其他更好的算法可以实现吗?

5 个答案:

答案 0 :(得分:0)

如果你知道数组/字符串长度,你可以循环并比较元素[i]和元素[length-i-1]

答案 1 :(得分:0)

您可以使用循环来检查结尾是否匹配:

int digits[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int length = sizeof(digits)/sizeof(digits[0]);
for (int i = 0; i < length; i++) {
    if (digit[i] != digits[length - i - 1])
        return false; // at this point, you know the number is not a palindrome 
return true;

答案 2 :(得分:0)

长度计算是一种类似C的方法,但它确实有效。

#include <iostream>
using namespace std;

bool isPalindrome(int* digit_array, int len) {
    if(len <= 1) return true;
    if(digit_array[0] != digit_array[len-1])
        return false;
    else
        return isPalindrome(++digit_array, len-2);
}

int main() {
    int digits[] = {1, 2, 3, 4};
    int digits2[] = {1, 2, 2, 1};

    // it returns false
    cout << "isPalindrome(digits) => " << isPalindrome(digits, (sizeof(digits)/sizeof(*digits))) << endl;

    // it returns true
    cout << "isPalindrome(digits2) => " << isPalindrome(digits2, (sizeof(digits2)/sizeof(*digits2))) << endl;

    return 0;
}

编辑:我刚读过Project Euler问题4.也许递归方法不是实现它的最好方法。

答案 3 :(得分:0)

我会将整数转换为字符串,并检查字符串的反向是否等于它自己。

#include <iostream>
#include <string>

int main()
{
    int num = 21334;
    auto s = std::to_string( num );

    if (std::string(s.begin(), s.end()) == std::string(s.rbegin(), s.rend()))
    {
        std::cout << "num is a palindrome";
    } else
    {
        std::cout << "num is not a palindrome";
    }
}

答案 4 :(得分:0)

我希望你现在已经解决了这个问题但是对于那些最近难倒的人来说,有一种更简单的方法可以在不弄乱字符串的情况下实现这一点。您可以使用mod函数和除法(%和/)的组合来分别查看每个数字。我解决这个问题的方法是向后构建数字,然后比较它们。这里的关键是知道数字%10将给你一个位置数字,然后数字/ 10将切断那些位数字。玩得开心,我非常喜欢解决一些体育问题!