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); } }