由于实例超出范围异常,一直试图解决运行时错误。我将int转换为字符串,将字符串反转并使用stoi将其返回给int。简单的测试数字可以完美地反转,但是更大的数字超出范围。不确定代码中的何处要针对超出范围的异常进行调整。超级卡住了,请帮忙。
int reverse(int x) {
bool negFlag = false;
if(x < 0)
{
negFlag = true;
}
string xString = std::to_string(abs(x));
std::reverse(xString.begin(), xString.end());
int xNum = std::stoi(xString);
return (negFlag == true)? -xNum: xNum;
}
这里是返回的错误:
terminate called after throwing an instance of 'std::out_of_range'
what(): stoi
Last executed input: 1534236469
较小的数字效果很好。
Your input: 123
Output: 321
Expected: 321
我的字符串末尾是否有\\ 0会在转换中丢弃所有内容?这些C ++方法的新手。非常感谢。真的很想确定这些方法并能够轻松使用它们。
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);
//...
}
是否还要将输入类型更改为更大的值,取决于函数应该能够处理的最大输入值。
输入范围大于int
可以容纳的范围。将其更改为long long
,它应该可以工作。
long long reverse(long long x) {
bool negFlag = false;
if(x < 0)
{
negFlag = true;
}
string xString = std::to_string(abs(x));
std::reverse(xString.begin(), xString.end());
long long xNum = std::stoll(xString);
return (negFlag == true)? -xNum: xNum;
}
注意,返回类型也需要更改。