题目
题解
此题有两个关键点,一个是对字符串的处理,一个是对溢出情况的判断。
- 字符串处理:
这里输入进来的字符串前端和后端什么字符都可能出现,故用一个while循环,先找到第一个数字s[i],再判断前面s[i-1] 是不是 ‘-’, 后面就一直找直到出现不为数字的字符为止。
- 溢出情况的判断:通常应该是这样:判断是否 ans * 10 + temp > Integer.MAX_VALUE ,但可能会出现 ans*10+temp 溢出的情况,所以不妨把不等式移动一下,ans > (Integer.MAX_VALUE - digit) / 10
代码如下:
int myAtoi(char * s){
int temp=0;
int ans=0;
int i=0,flg=1;
while((s[i]<'0'||s[i]>'9')&&s[i]!='\0')
{
i++;
}
if(i==strlen(s)-1)return 0;
if(s[i-1]=='-')
{
flg=-1;
}
//printf("flg:%d\n",flg);
while(s[i]>='0'&&s[i]<='9'&&s[i]!='\0')
{
temp=s[i]-'0';
if(ans > (2147483647 - temp) / 10)
{
if(flg>0)return 2147483647;
else return -2147483648;
}
ans*=10;
ans+=temp;
i++;
}
ans=ans*flg;
return ans;
}
此题亮点是对溢出情况的判断,用变换不等式的方法。