zoukankan      html  css  js  c++  java
  • String to Integer (atoi)

    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的计算过程如下:

    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; } };
  • 相关阅读:
    数据应用
    Python邮件脚本
    函数
    tab模块
    python登陆,注册小程序
    三元运算+lambda表达式
    计算机基础
    软件测试概要
    asyn_fifo
    perl 对ENV环境变量的使用
  • 原文地址:https://www.cnblogs.com/fightformylife/p/4076734.html
Copyright © 2011-2022 走看看