码迷,mamicode.com
首页 > 其他好文 > 详细

String to Integer (atoi)

时间:2014-11-05 19:12:08      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   ar   os   for   sp   

Implement atoi to convert a string to an integer.

Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.

Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

分析:题目输入有点恶心,各种破烂输入。唯一有点价值的就是越界的输入int的范围是-231—231-1,也就是(-2147483648--2147483647)。

当2147483647+1的时候,该数在计算机中就变成了-2147483648,也就是说这是个环,当越界的时候,就从另外一头开始,那么这是为什么呢?

因为计算机中用补码表示所有的整数,最高位是符号位,那么负数最高位的称为负权。

-2147483648 -231也就是最高位为1,其余全0。

2147483647 231-1最高位为0,其余全1。

那么-2147483648-1的计算过程如下:

bubuko.com,布布扣

class Solution {
public:
    bool isValid(char i,char next)
    {
        if(next==-||next==+)
            return false;
        else
            return i==-||i==+||(i>=0&&i<=9);
    }
    int atoi(const char *str) {
        int max=~(unsigned int)0/2;
        int min=max+1;
        if(str==NULL||str=="") return 0;
        int len=strlen(str);
        long long res=0;
        int i=0;
        while (str[i]== ) ++i;//忽略开始的空格
if(isValid(str[i],str[i+1])){//判断符号和连续符号 switch (str[i]) { case -: for(int q=i+1;q<len;++q){ if(str[q]>=0&&str[q]<=9) res=res*10+str[q]-0; else break; } res=-res; if(res<=min) return min; return res; case +: for(int q=i+1;q<len;++q){ if(str[q]>=0&&str[q]<=9) res=res*10+str[q]-0; else break; } if(res>=max) return max; return res; default: for(int q=i;q<len;++q){ if(str[q]>=0&&str[q]<=9) res=res*10+str[q]-0; else break; } if(res>=max) return max; return res; break; } } else return 0; } };

 

String to Integer (atoi)

标签:style   blog   http   io   color   ar   os   for   sp   

原文地址:http://www.cnblogs.com/fightformylife/p/4076734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!