import java.util.Scanner;
左神书上的解法
public class Main {
//判断输入是否符合标准
public static boolean isValid(char[] chas) {
if (chas[0] != '-' && (chas[0] < '0' || chas[0] > '9')) {
return false;
}
if (chas[0] == '-' && (chas.length == 1 || chas[1] == '0')) {
return false;
}
if (chas[0] == '0' && chas.length > 1) {
return false;
}
for (int i = 1; i < chas.length; i++) {
if (chas[i] < '0' || chas[i] > '9') {
return false;
}
}
return true;
}
public static int convert(String str) {
if (str == null || str.equals("")) {
return 0;//不能转
}
char[] chas = str.toCharArray();
if (!isValid(chas)) {
return 0;
}
boolean posi = chas[0] == '-' ? false : true;//true代表是正数,false代表是负数
int minq = Integer.MIN_VALUE / 10;
int minr= Integer.MIN_VALUE%10;
int res=0;
int cur=0;
//转换的过程中一直以负数出现
for (int i = posi?0:1; i <chas.length ; i++) {
cur='0'-chas[i];
//转换过程中数据溢出
if((res<minq)||(res==minq&&cur<minr)){
return 0;
}
res=res*10+cur;
}
if(posi&&res==Integer.MIN_VALUE){
return 0; //是正数,但是绝对值超了
}
return posi?-res:res;
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String str=in.nextLine();
int result=convert(str);
System.out.println(result);
}
}