out of range помогите решить! с++

Не могу понять где происходит эта ошибка при вводе числа 124145436767:

libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: stoi: out of range
Abort trap: 6
#include <iostream>
#include <math.h>

using namespace std;

int main(){
    string nn;
    cin >> nn;
    int n = stoi(nn), lnn = nn.size(), sn = sqrt(n) + 1;

    if (nn[lnn - 1] != '2' && nn[lnn - 1] != '4' && nn[lnn - 1] != '5' && nn[lnn - 1] != '6' && nn[lnn - 1] != '8'){
        for (int i = 3; i <= sn; i += 2){
            if (n % i == 0){
                printf("-1 -1");
                return 0;
            }
        }
    }
    else {
        printf("-1 -1");
        return 0;
    }

    for (int j = -1; j >= -lnn; j -= 1){
        if (j != -1){
            n = stoi(nn.substr(0, lnn + j) + nn.substr(lnn + j + 1, lnn - 1));
        }
        else {
            n = stoi(nn.substr(0, lnn - 1));
        }
        string nnn = to_string(n);
        sn = sqrt(n) + 1;
        if (nnn[lnn - 1] != '2' && nnn[lnn - 1] != '4' && nnn[lnn - 1] != '5' && nnn[lnn - 1] != '6' && nnn[lnn - 1] != '8'){
            for (int i = 3; i <= sn; i += 2){
                if (n % i == 0){
                    printf("-1 %i", lnn + j + 1);
                    return 0;
                }
            }
        }
        else {
            printf("-1 %i", lnn + j + 1);
            return 0;
        }
    }

    for (int j = -1; j >= -lnn; j -= 1){
        if (j != -1){
            n = stoi(nn.substr(0, lnn + j) + nn.substr(lnn + j + 1, lnn - 1));
        }
        else {
            n = stoi(nn.substr(0, lnn - 1));
        }
        string nna = to_string(n);
        sn = sqrt(n) + 1;

        for (int k = j; k >= lnn; k -= 1){
            int na = stoi(nna.substr(0, lnn - 1));

            if (k != -1){
                int na = stoi(nna.substr(0, lnn + k) + nna.substr(lnn + k + 1, lnn - 1));
            }

            int sna = sqrt(na);

            if (nna[lnn - 1] != '2' && nna[lnn - 1] != '4' && nna[lnn - 1] != '5' && nna[lnn - 1] != '6' && nna[lnn - 1] != '8'){
                for (int i = 3; i <= sna; i += 2){
                    if (n % i == 0){
                        printf("%i %i", lnn + j + 1, lnn + k);
                        return 0;
                    }
                }
            }
        }
    }
}

Ответы (1 шт):

Автор решения: ТарасПрогер
    long long int n = stoll(nn); // string to long long
    int lnn = nn.size(), sn = sqrt(n) + 1;

В самом начале происходит переполнение. Везде поменяйте на stoll, когда конвертируете string и помещаете в переменную n

→ Ссылка