Pregunta

He estado tratando durante 2 días ahora para que este código funcione.Simplemente ha sido error tras error.

Puede alguien señalar lo que estoy haciendo mal?

#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);
}

Usar std::to_string sólo me da más errores así.

¿Fue útil?

Solución

Cuando su compilador le explica algo en un mensaje de error, debe creerlo.De hecho, itoa hace, de hecho, toma más de un argumento, como puede ver en el siguiente enlace:

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

Editar: Oh y esto es alcanzable usando el código de estilo estándar, C ++ por cierto (arreglado un poco de código según su sugerencia en los comentarios):

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;
}

aquí.No estoy seguro de que sea la solución más limpia, pero funciona en mi compilador.

Editar: Se enteró de cómo usar un solo flujo de cuerdas aquí: ¿Cómo borrar Stradstream?

Otros consejos

¿Puedo sugerir una solución diferente?En lugar de hacer las conversiones de cadenas INT <-> que puede probar para ver si un número es un palíndromo de esta manera:

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;
}

entonces su prueba se convierte en:

if (is_palindrome(c) && (c > h))

Para el primer problema, corrija la sangría podría dejarlo claro:

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;

Con algunos extra entre paréntesis:

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;
    }
}

Como para el itoa problema, su firma es:

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

así que usted no puede simplemente escribir itoa(x) y espera que devuelva una cadena de caracteres.

Sin embargo, hay una mejor manera de convertir un int a un string en C++

  • si usted tiene C++11, std::to_string
  • de lo contrario, una std::stringstream va a hacer el trabajo.

Así:

#include <sstream>

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

Tenga en cuenta que esto no va a devolver el int invierte sin embargo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top