Обратное значение 1,534,236,469
равно 9,646,324,351
. Максимальное значение, которое может хранить типичный 32-битный int
, равно 2,147,483,647
, поэтому оно не вписывается в него.
Вам необходимо, чтобы ваша функция возвращала что-то большее, например, long long
(что вминимум 64 бита) и используйте для него соответствующую функцию преобразования, например:
long long reverse(int x) {
//...
long long xNum = std::stoll(xString);
//...
}
Если вы хотите изменить тип ввода также на более крупный, зависит от максимального входного значения, которым ваша функция должна бытьвозможность обработки.
После редактирования:
Вы можете отследить ошибку преобразования и вернуть 0
в этом случае (требуется #include<stdexcept>
):
try {
int xNum = std::stoi(xString);
// Maybe insert additional range test according to assignment (?)
return (negFlag == true)? -xNum: xNum;
} catch(const std::out_of_range&) {
return 0;
}
Предполагая, что int
является 32-битным дополнением до двух (что, как я понимаю, назначение пытается предложить с диапазоном значений, который предположительно должен быть [-2**31, 2**31-1]
):
Также обратите вниманиечто ваш начальный вызов abs
имеет неопределенное поведение, если x == -2**31
, потому что 2**31
не может быть представлен в 32-битном int
. Поэтому перед тем, как вызвать abs
, нужно сначала сделать специальный случай для этого, чтобы избежать неопределенного поведения.
Аналогичным образом вам нужно рассмотреть случай, когда результат функции должен быть -2**31
. Но вы можете заметить, что этот случай не имеет значения, потому что его соответствующее входное значение уже выйдет за пределы int
.