我无法理解输入数字 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;
}
}
}
}
}
}
溢出发生在一开始。转换并放入变量
stoll
时更改为到处string
n