题目描述:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为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;或许答案有问题。