Неправильный вывод при преобразовании длинных строк в целое с использованием рекурсивной функции (c ++) - PullRequest
0 голосов
/ 19 октября 2019
    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;
    } 

Правильный вывод для s1 = 12345.
Но для s2 = "123456789101" он дает неправильный вывод (отрицательное число !!!) Кто-нибудь может сказать, что идет не так? Что я должен сделать, чтобы преобразовать длинные строки в целое число с помощью рекурсивной функции?

1 Ответ

0 голосов
/ 19 октября 2019

Простой ответ:

123456789101 > 2147483647 = INT_MAX (= максимальное значение для переменной типа int).

Таким образом, ваша функция обязательно должна вернуть неправильное значение в некоторой точке вдольway.

Замените int на long long (или даже unsigned long long), и он может корректно работать для этого конкретного входа (в зависимости от вашей платформы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...