int stringToInt(string str) 
    { 

        if (str.length() == 1){ 

            return (str[0] - '0');
        }  

        double y = stringToInt(str.substr(1));  
        double x = str[0] - '0'; 

        x = x * pow(10, str.length() - 1) + y;
        return int(x); 
    }

    int main(){
        string s1= "12345";
        string s2= "123456789101";
        cout<<"s1"<<stringToInt(s1)<<endl;
        cout<<"s2"<<stringToInt(s2)<<endl;
    } 

Salida correcta para s1 = 12345.
Pero para s2 = "123456789101", da una salida incorrecta (¡¡¡número negativo !!!) ¿Alguien puede decir qué va mal? ¿Qué debo hacer para convertir cadenas largas en enteros usando la función recursiva?

0
Maryam 19 oct. 2019 a las 14:38

1 respuesta

La mejor respuesta

Respuesta simple:

123456789101 > 2147483647 = INT_MAX (= valor máximo para una variable de tipo int).

Por lo tanto, su función seguramente devolverá un valor incorrecto en algún momento del camino.

Reemplace int con long long (o incluso unsigned long long), y podría funcionar correctamente para esta entrada específica (dependiendo de su plataforma).

0
goodvibration 19 oct. 2019 a las 15:53