要求不能使用long,int类型溢出没想到好的方法。改用字符串后溢出的地方判断的还是不好。
class Solution {
public:
int reverse(int x) {
string result = "";
int flag = 1;
if(x < 0)
{
flag = -1;
}
std::stack<int> st;
while(x != 0)
{
st.push(std::abs(x % 10));
x /= 10;
}
while(!st.empty())
{
result = std::to_string(st.top()) + result;
st.pop();
}
if(std::to_string(atoi(result.c_str())) != result && result[0] != '0')
{
return 0;
}
//if(atoi(result.c_str())*flag > INT_MAX || atoi(result.c_str())*flag < INT_MIN)
//{
// return 0;
//}
return atoi(result.c_str())*flag;
}
};
做第八题时想到了判断溢出的方法:
class Solution {
public:
int reverse(int x) {
int result = 0;
int flag = 1;
if(x < 0)
{
flag = -1;
}
std::stack<int> st;
while(x != 0)
{
st.push(std::abs(x % 10));
x /= 10;
}
int temp = 1;
while(!st.empty())
{
if(st.top() > (INT_MAX - result) / temp)
{
return 0;
}
result = st.top()*temp + result;
st.pop();
if(!st.empty())
{
temp *= 10;
}
}
return result*flag;
}
};