首页 > 代码库 > 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)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。