这题主要是一个判溢,有个数据21474836460,需要用这个判溢语句
if (ret > (INT_MAX / 10)||(ret==(INT_MAX/10)&&((s[i]-'0')>7)))
用这题用if-else虽然看着臃肿,但是效率是很高的。
#include<iostream>
#include<string>
using namespace std;
class Solution {
public:
int myAtoi(string s) {
int stage = 1;//当前阶段 判断空格、判断符号、进数字、返回值
int sig = 1;
int ret = 0;
for (int i = 0; i < s.size(); i++)
{
if (stage == 1)
{
if (s[i] == ' ')
{
continue;
}
else
{
stage++;
}
}
if (stage == 2)
{
stage++;
if (s[i] == '+')
{
continue;
}
if (s[i] == '-')
{
sig = -1;
continue;
}
}
if (stage == 3)
{
if (('0' <= s[i])&&(s[i] <= '9'))
{
if (ret > (INT_MAX / 10)||(ret==(INT_MAX/10)&&((s[i]-'0')>7)))
//要考虑余数,如果和INT_MAX/10相等,但是余数在0~7还是有机会的
{
if (sig == 1)
{
return INT_MAX;
}
else
{
return INT_MIN;
}
stage++;
continue;
}
ret = ret * 10 + (s[i]-'0');
continue;
}
else
{
stage++;
break;
}
}
if (stage == 4)
{
break;
}
}
return sig * ret;
}
};
int main()
{
Solution test;
string s = "21474836460";
cout << test.myAtoi(s);
}