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 }

 

转载于:https://www.cnblogs.com/boring09/p/4268075.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值