zoukankan      html  css  js  c++  java
  • OJ练习6——T8

    把一串字符(字符指针表示的)转换为整数,要考虑以下情况:

    1.忽略开始的空白字符

    2.如果第一个非空白字符不是表示数字的正负号,就返回0

    3.越界就返回界(即大于INT_MAX就返回INT_MAX,小于INT_MIN就返回INI_MIN)

    【分析】

    题目比较简单,要考虑的情况也容易想到,但是处理起来有细节要注意。

    int atoi(const char *str) {
            int i=0;
            int flag=1;
            long long result=0;
            if(str==NULL)
                result=0;
            while(str[i]!='' && (isspace(str[i])))
                i++;
            if(str[i]=='-'){
                flag=-1;
                i++;
            }
            else if(str[i]=='+') i++;
            else ;
             while(str[i]!='' && isdigit(str[i])){
                result=result*10+str[i]-'0';
               
                if(flag*result>2147483647){
                    result=2147483647;
                    break;}
                if(flag*result<-2147483648){
                    result=-2147483648;
                    break;}
                i++;
            }
            return flag*result;
        }

    【总结】

    在最后越界处理上花费了很多时间,如果数据超大,远远超过INT_MAX或INT_MIN,就必须在达到界时就返回,否则会转换成其他的数不能判为越界。

    所以判断越界否要在循环里面进行。

    测试例有一例为,输入-2147483648,由于正负的界不是对称的,如果不先加上符号一起判断,就不能得到正确的-2147483648,而是得到-2147483647.

    所以flag*result,一起判断是否越界,不能在最后才加符号。

  • 相关阅读:
    IDEA连接 Oracle数据库
    什么是混合云备份
    什么是阿里云ACA认证
    什么是阿里云ACE认证
    什么是轻量应用服务器
    什么是时序时空数据库TSDB
    什么是数据管理DMS
    什么是分析型数据库PostgreSQL版
    阿里云多端小程序
    阿里云云计算ACP专业认证考试
  • 原文地址:https://www.cnblogs.com/ketchups-notes/p/4227736.html
Copyright © 2011-2022 走看看