超long型的数值字符串转换为二进制字符串

具体思路是:

1.将字符串转化为字符数组

2.将字符数组转化为整型数组

3.设计整型数组除2的方法

4.设计整型数组对2取余的方法

5.设计退出条件,整型数组所有元素的值都为0

啥也不说了,贴代码。

public class BigIntToBin {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String intstr="8392162";
        String result="";
        char [] charArray=StrToCharArray(intstr);
        int [] intArray=CharArrayToIntArray(charArray);
        boolean exitFlag=false;
        
        while(true){
            exitFlag=checkExit(intArray);
            if(exitFlag){
                break;
            }else{
                result=String.valueOf(intArrayModTwo(intArray))+result;
                intArray=IntArrayDivTwo(intArray);
            }
        }
        System.out.println(result);

    }

    // 字符串转字符数组
    static char [] StrToCharArray(String  str){
        return str.toCharArray();
    }
    
    // 字符数组转整型数组
    static int [] CharArrayToIntArray(char [] charArray){
        int [] intArray=new int[charArray.length];
        for (int i = 0; i < intArray.length; i++) {
            intArray[i] = charArray[i] - '0';
        }
        return intArray;
    }
    
    // 检查整型字符串是否所有值都为0
    static boolean checkExit(int [] intArray){
        int sum = 0;
        for (int i = 0; i < intArray.length; i++) {
            sum=sum+intArray[i];
        }
        if(sum==0){
            return true;
        }else{
            return false;
        }
    }
    
    // 整型数组除2得到新数组
    static int [] IntArrayDivTwo(int [] intarray){
        int [] resultArray= new int [intarray.length];
        boolean giveFlag=false;
        
        // 遍历整型数组,计算除2
        for (int i = 0; i < intarray.length; i++) {
            // 补位处理
            if(giveFlag){
                resultArray[i] = (int)((10+intarray[i])/2);
                giveFlag=((10+intarray[i])%2)==1?true:false;
            }else{
                // 最后一位处理
                if(i==intarray.length){
                    resultArray[i]=(int)(intarray[i]/2);
                }else{
                    // 值为1处理
                    if(intarray[i]==1){
                        resultArray[i]=0;
                        giveFlag=true;
                    // 值为非1处理
                    }else{
                        resultArray[i] = (int)(intarray[i]/2);
                        giveFlag = (intarray[i]%2)==1?true:false;
                    }
                }
            }
        }
        return resultArray;
    }

    // 整型数组对2取余数
    static int intArrayModTwo(int [] intarray){
        return intarray[intarray.length-1]%2;
    }
}

未处理异常情况,作为一个测试人员,我的目标是实现功能,未考虑空串,全为0的串等情况。

经过这次处理,对大数相加,大数相减,大数相乘处理起来都不是问题,大数相除需要考虑的还比较多,还没整理处理。

猜你喜欢

转载自www.cnblogs.com/eagle-1024/p/8987731.html
今日推荐