题目:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
思路:
- 1.字符串为空
- 2.只有一个正或负号
- 3.整数上下溢出 Integer.MAX_VALUE (2^31-1) Integer.MIN_VALUE(-2^31)
Java
package nowcoder;
public class S49_StrToInt {
public int strToInt(String str){
if(str == null ||str.length()==0 || str.trim().equals(""))
return 0;
char[] chars = str.trim().toCharArray();
int res=0,flag=1,start=0,tmp=0;
if(chars[0] == '-') {
flag = -1;
start = 1;
}
if(chars[0] == '+')
start = 1;
for(int i =start;i < chars.length;i++){
if(chars[i] > '9' || chars[i] < '0')
return 0;
//当前个位数字
int dight = (int)(chars[i] - '0');
tmp = res * 10 + dight;
//判断正数溢出
if(flag == 1 && res*10>Integer.MAX_VALUE - dight)
return 0;
//判断负数溢出
if(flag == -1 && res*10*flag < Integer.MIN_VALUE + dight)
return 0;
res = tmp;
}
return flag* res;
}
public static void main(String[] args){
S49_StrToInt s49 = new S49_StrToInt();
System.out.println(s49.strToInt("-2147483649"));
}
}
Python
class StrToInt:
def strToInt(self,str):
if len(str) == 0 or not str:
return 0
start = 0
symbol = 1
res = 0
if str[0] == '+':
start = 1
elif str[0] == '-':
start = 1
symbol = -1
for i in range(start, len(str)):
if str[i] >= '0' and str[i] <= '9':
res = res * 10 + ((ord(str[i]) - ord('0')))
else:
return 0
if res > 2147483647:
return 0
return symbol * res
if __name__ == '__main__':
test = StrToInt()
print(test.strToInt("-2147483649"))