大概有10天左右没有练习算法编程了!还是不能放下。。。
剑指offer49题
题目描述
package test1;
public class Test49 {
public static int StrToInt(String str) {
//例如将字符串“123”转化为123;理解是1*10=10;10*10+2=12;12*10+3=123;
if(str==null||str.length()<1){
throw new NumberFormatException(str);
}
char first=str.charAt(0);
if(first=='-'){
return parseString(str,1,false); //符号负数的处理
}else if(first=='+'){
return parseString(str, 1, true);//符号正数处理
}else if(first>'0'&&first<'9'){
return parseString(str, 0, true);//正常处理
}else{
throw new NumberFormatException(str);//异常处理
}
}
private static int parseString(String str, int index, boolean sp) {
if(index >=str.length()){
throw new NumberFormatException(str);
}
int result = 0;
long tmp=0;
while(index<str.length()&&isDigit(str.charAt(index))){
tmp=tmp*10+str.charAt(index)-'0';//从最高位取数字,tmp=1;index=1,tmp=10+2;index=2,tmp=120+3;
//保证求出的值不超过整数的最大范围
if(tmp>Integer.MAX_VALUE){
throw new NumberFormatException(str);
}
index++;
}
//sp=true是表示正数。sp=false则是负数
if(sp){
if(tmp>=Integer.MAX_VALUE){
throw new NumberFormatException(str);
}else{
result=(int)tmp;
}
}else{
if(tmp==Integer.MAX_VALUE){
result = 0x8000_0000;
}else{
result=(int)-tmp;
}
}
return result;
}
private static boolean isDigit(char c) {
return c >= '0' && c <= '9';
}
public static void main(String[] args) {
System.out.println(StrToInt("123"));
}
}