首页 > 代码库 > Leetcode#8 String to Integer (atoi)

Leetcode#8 String to Integer (atoi)

原题地址

 

非常恶心的一道题,又是处理溢出问题

根据经验,处理溢出问题应该:

优先在还没溢出的时候检测运算后的结果是否会溢出,而不是等到溢出以后再去判断结果是否溢出

比如,为了判断F(x)是否会溢出,应该推算出x的合法范围,当x不在合法范围内时,判定溢出。而不是计算出F(x)的值之后再判断是否会溢出。有时候计算x的合法范围不是很容易,这个时候再权衡考虑去用F(x)的值判断是否溢出。

 

代码:

 1 int atoi(const char *str) { 2         bool negative = false; 3          4         while (*str ==  ) 5             str++; 6              7         if (*str == + || *str == -) { 8             negative = *str == -; 9             str++;10         }11         12         int num = 0;13         while (isdigit(*str)) {14             // 溢出检测15             if ((INT_MIN + (*str - 0)) / 10 > num)16                 return negative ? INT_MIN : INT_MAX;17             num = num * 10 - (*str - 0);18             str++;19         }20         21         if (!negative && num == INT_MIN)22             return INT_MAX;23         return negative ? num : -num;24 }

 

Leetcode#8 String to Integer (atoi)