字符串转换整除和整数转换

字符串转换整数

题目描述

提示:

思路:

先排除特殊符号,然后计算数字,计算数字的时候还要注意范围判断(判断范围这块错了好几次)
int myAtoi(char * str){
          
   
    int i =  0;
    int fu = 1;
    int sum = 0;
    while (str[i] !=  && str[i] ==  )     //排除开头的空格
        i++;
    if (str[i] == )     //判断是否到结尾
        return 0;
    if (str[i] == +)      //判断正负
    {
          
   
        fu = 1;
        i++;
    }
    else if (str[i] == -)     
    {
          
   
        fu = -1;
        i++;
    }
    else if(str[i]<0 || str[i] >9)         //如果不是数字就结束
        return 0;
    while(str[i] >= 0 && str[i]<=9)
        {
          
   
            if (fu == -1)
            {
          
   
                if (sum > 214748364 || (sum == 214748364 && str[i]-0>=8))    //不能超范围
                    return -2147483648;
            }
            else
            {
          
   
                if (sum > 214748364 || (sum == 214748364 && str[i]-0>=7))
                    return 2147483647;
            }
            sum = sum*10;
            sum += (int)(str[i] - 0);
            i++;
        }
    if (fu == -1)
        return 0-sum;
    else
        return sum;
}

结果还好,没白改这么多次

整数反转

题目

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2e31, 2e31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

这道题算比较简单的了,唯一需要注意的就是范围,开始用int装转换后的数,结果数太大溢出了,后面改用long就好了

int reverse(int x){
          
   
    long a=0;
    while(x != 0)
    {
          
   
        /*开始的想法很复杂,之后在题解中
        发现还可以这样写,这样写明显比之
        前的更好,所以我果断放弃之前的,
        采用这种方法*/
        a = a*10 + x%10;
        x /= 10;
    }
    if (a<-2147483648 || a>2147483647)
        return 0;
    else
        return a;
}

结果还好

经验分享 程序员 微信小程序 职场和发展