C++ 检查C+中的回文数+;

C++ 检查C+中的回文数+;,c++,C++,我想把每个数字放入一个数组,看看元素的值在正确的位置是否相同。这就是我到目前为止所做的: int digits[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; 但我不会写代码。我怎样才能把这个号码变成那样? 我知道C++的基本知识(循环和指针)。 如何在C++中使用可调整数组,我应该使用这个数组吗? 我也不知道数组的大小应该是多少。 还有其他更好的算法可以实现吗 如果知道数组/字符串长度,可以循环并比较元素[i]和元素[length-i-1]可以使用循环检查端点是否匹配:

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

int digits[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
但我不会写代码。我怎样才能把这个号码变成那样? 我知道C++的基本知识(循环和指针)。 如何在C++中使用可调整数组,我应该使用这个数组吗? 我也不知道数组的大小应该是多少。
还有其他更好的算法可以实现吗

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

可以使用循环检查端点是否匹配:

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;
int位数[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int length=sizeof(位数)/sizeof(位数[0]);
for(int i=0;i
长度计算是一种类似于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;
}
#包括
使用名称空间std;
bool isPalindrome(整数*数字数组,整数长度){

if(len我将把整数转换成字符串,并检查字符串的倒数是否等于它本身

#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";
    }
}
#包括
#包括
int main()
{
int num=21334;
自动s=std::to_字符串(num);
如果(std::string(s.begin(),s.end())==std::string(s.rbegin(),s.rend())
{

std::cout我希望您现在已经解决了这个问题,但是对于那些最近被难倒的人,有一种更简单的方法来完成这项工作,而不必处理字符串。您可以使用mod函数和除法(%and/)的组合逐个查看每个数字。我解决这个问题的方法是向后构建数字,然后比较它们。这里的关键是要知道数字%10会给你一位数字,然后数字/10会切掉一位数字。祝你玩得开心,我真的很喜欢处理一些PE问题!

你是说回文吗?我读过了嗨,约翰,欢迎来到栈溢出。你现在尝试了什么?是的。我不知道字符串命令。为什么你建议我使用字符串而不是数组,我能将int转换成C++中的字符串和逆序吗?就像Python一样?因为两个3位数的乘积最多可以使用6个数字,从而确定一个合适的字符串大小。(或十进制数字数组)不是很难。是的,你可以将
int
转换为
string
并获得字符串长度。字符串也是数组-字符数组。但是两个整数的乘积将是int而不是string。我如何使用动态数组,所以我不需要指定元素?@JohnSmith,我保证你会在一分钟内找到
std::vector
查找“C++动态数组”。您有3位数字的乘积。最大的3位数字是999,因此乘积是999*999。它是6位数字。sizeof(数字)和sizeof(数字[0]等于什么?您能给我一个例子并解释更多吗?这只是一种获得数组长度的方法。
sizeof(数字)
提供数组大小(字节)-15
int
元素给出60个字节。
sizeof(数字[0])
给出数组中一个元素的大小(以字节为单位)-int的大小(大部分为4个字节)。因此60/4给出15。当您只需测试
std::equal(s.begin(),s.begin()+s.length()/2,s.rbegin())时,使字符串copes是浪费的。