题目:、
思路:这个思路不复杂就是有点麻烦,直接看代码吧。。。
代码:
import java.util.*; public class zcy1 { public static void main(String[] args){ Scanner sc=new Scanner(System.in); String a=sc.next(); //返回处理完的数字。如果不能转换直接输出-1 int res=convert(a); System.out.println(res); } public static int convert(String a){ if(a==null||a.equals("")){ return 0; } char[]a1=a.toCharArray(); //这个方法是用来排除一些不能进行转换的特殊情况 if(!help(a1)){ return 0; } //这个是用来记录正负的 boolean posi=a1[0]=='-'? false:true; //以下这两个和判断是否超出范围有关 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<a1.length;i++){ cur='0'-a1[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 boolean help(char[]chas){ //第一个字符是除了负号的其他非数字符号 if(chas[0]!='-'&&(chas[0]<'0'||chas[0]>'9')){ return false; } //第一个字符是符号,但是整体字符长度是1或者第二个字符是0 if(chas[0]=='-'&&(chas.length==1||chas[1]=='0')){ return false; } //只有一个0 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; } }