• 题目描述:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0

  • 思路:

    • 1.获取字符串长度length,从后到前遍历;
    • 2.算出各个位置的值,进行加和,'0'对应ASCII中的48;
    • 3.边界处理,当所得的值大于int最大值,或小于int最小值,返回0;
  • 代码

    public int StrToInt(String str) {
          int n = 0;
          long num = 0;
          boolean negative = false;
          // 1.获取字符串长度
          int len = str.length();
          for (int i = len - 1; i >= 0; i--) {
              char value = str.charAt(i);
              if (value - '0' >= 0 && value - '0' <= 9) {
                  // 2.算出各位置的值
                  num += (value - '0') * Math.pow(10, n);
              } else if (i == 0) {
                  // 进处理i=0时的'+'或'-'
                  if (value == '+')
                      negative = false;
                  else if (value == '-')
                      negative = true;
                  else return 0;
              }else {
                  return 0;
              }
    
              n++;
          }
          num = negative ? -num:num;
          // 3.判断num是否超出范围
          if (num < Integer.MIN_VALUE || num > Integer.MAX_VALUE) return 0;
          return (int)num;
    
      }
  • 以上代码提交后,报了错误,报错的值:-2147483649,该值超出边界理应返回0;不知为何运行的时候,答案却显示-2147483649;或许答案有问题。