zoukankan      html  css  js  c++  java
  • leetcode:atoi

    转换原则:忽略前导空格,从+-或数字开始转换,中间出现非数字break,注意判断乘法加法溢出,大于INT_MAX输出INT_MAX,小于INT_MIN输出INT_MIN

    int atoi(const char *str) {
        if (str==NULL)
        {
            return 0;
        }
        int ans=0,pos=1,pre;
        while (*str==' '|| *str=='	') ++str;
        if (*str=='-'){
            pos=-1;
            ++str;
        }
        else if (*str=='+')
        {
            pos=1;
            ++str;
        }
        if (!isdigit(*str))
            return 0;
        ans=(*str-'0')*pos;
        ++str;
        
        for (;*str!='';++str){
            if (isdigit(*str)){
                pre=ans;
                if (pos==1&&pre>INT_MAX/10){
                    ans=INT_MAX;
                    break;
                }
                if (pos==-1&&pre<INT_MIN/10){
                    ans=INT_MIN;
                    break;
                }
                pre=ans*10;
                ans=ans*10+(*str-'0')*pos;
                 if (pos==1&&ans<pre){
                    ans=INT_MAX;
                    break;
                }
                if (pos==-1&&ans>pre){
                    ans=INT_MIN;
                    break;
                }
            }
            else break;
        }
        
        return ans;
    }
  • 相关阅读:
    Codeforces 1072
    XDOJ 1046
    BZOJ 1002
    BZOJ 1001
    BZOJ 1500/Luogu 2042
    nowcoder 211B
    BZOJ 3224
    BZOJ 1150
    POJ 2442
    二叉堆和二叉搜索树进阶
  • 原文地址:https://www.cnblogs.com/mintmy/p/4162430.html
Copyright © 2011-2022 走看看