1

我已经尝试了 2 天来让这段代码正常工作。这只是一个又一个错误。

谁能指出我做错了什么?

#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;

int main()
{
    int h = 0;
    for(int a = 100; a<1000; a++)
        for(int b = 100; b<1000; b++)
            int c = a * b;
// Error: "c" is undefined
            if ((c == reverse(c)) && (c > h))
                h = c;
    cout << "The answer is: " << h << endl;
}

int reverse (int x)
{
// Error: "'itoa' : function does not take 1 arguments"
    string s = string(itoa(x));
    reverse(s.begin(), s.end());
  return (x);
}

使用 std::to_string 也会给我更多错误。

4

3 回答 3

1

当您的编译器在错误消息中向您解释某些内容时,您应该相信它。itoa实际上,确实需要多个参数,如您在以下链接中所见:

http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/

编辑:哦,顺便说一句,这可以使用标准的 C++ 风格的代码来实现(根据评论中的建议修复了一些代码):

int reverse(int x)
{
    std::stringstream ss;
    ss << x;

    std::string s = ss.str();
    std::reverse(s.begin(), s.end());

    ss.clear();
    ss.str(s.c_str());

    ss >> x;

    return x;
}

这里。不确定这是最干净的解决方案,但它适用于我的编译器。

编辑:在此处了解如何仅使用一个字符串流:如何清除字符串流?

于 2012-07-29T04:38:15.580 回答
1

我可以提出不同的解决方案吗?除了进行 int<->string 转换,您还可以通过以下方式测试一个数字是否为回文:

bool is_palindrome(int number, int base = 10)
{
    int rebmun = 0;
    for (int temp = number; temp != 0; temp /= base) {
        rebmun = (rebmun * base) + (temp % base);
    }
    return number == rebmun;
}

然后你的测试变成:

if (is_palindrome(c) && (c > h))
于 2012-07-29T05:09:55.983 回答
0

对于第一个问题,正确的缩进可能会清楚:

int h = 0;
for(int a = 100; a<1000; a++)
    for(int b = 100; b<1000; b++)
        int c = a * b;

if ((c == reverse(c)) && (c > h))
    h = c;

加上一些额外的括号:

int h = 0;
for(int a = 100; a<1000; a++)
{
    for(int b = 100; b<1000; b++)
    {
        int c = a * b;
        if ((c == reverse(c)) && (c > h))
            h = c;
    }
}

至于这个itoa问题,它的签名是:

char *  itoa ( int value, char * str, int base );

所以你不能只写itoa(x)并期望它返回一个字符串。

然而,在 C++ 中有更好的方法将 a 转换int为 astring

  • 如果你有 C++11,那里std::to_string
  • 否则,astd::stringstream将完成这项工作。

像这样:

#include <sstream>

int reverse (int x)
{
    std::stringstream ss;
    ss << x;
    string s(ss.str());
    reverse(s.begin(), s.end());
    return (x);
}

请注意,这不会返回int相反的结果。

于 2012-07-29T04:36:20.570 回答