zoukankan      html  css  js  c++  java
  • 字符串问题之 将证书字符串转成整数值

    给定一个字符串str,如果str符合日程书写的证书形式,并且属于32位整数的范围,返回str所代表的整数值,否则返回0

      str="123"

    整体思路:

     首先判断这个字符串的合法性

     然后开始遍历

       遍历时候一定要注意了:

       32位整型,负数的绝对值 大于 整数的 绝对值 范围

        遍历的 str=res*10+cur    

        重点在于遍历的过程中就判断是否溢出问题:

            如果在 res加上cur之前,发现res已经小于minq,那么res加上cur一定会溢出

           如果在 res加上cur之前,发现res已经等于minq,但又发现cur小于minr,那么当res加上cur之后一定会溢出

    最后根据posi决定返回值 ,同时考虑溢出的问题。

    上代码:

    package TT;
    
    public class Test3 {
     
        public static boolean isValid(char[] chas){
            if(chas[0]=='-' && (chas[1]<'0'||chas[1]>'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;
            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){
            
            String str = "-1234";
            int a = convert(str);
            System.out.println(a);
            
        }
        
        
        
        
        
        
    }
  • 相关阅读:
    浅谈服务端渲染
    vuex数据持久化
    vuex中的命名空间
    如果在项目中使用阿里图标库
    vue中的插槽
    webpack相关以及搭建react环境
    数组的reduce方法
    再也不用等后端的接口就可以调试了Json-server
    react中如何使用swiper
    解决vue中组件库vant等ui组件库的移动端适配问题
  • 原文地址:https://www.cnblogs.com/toov5/p/7395935.html
Copyright © 2011-2022 走看看