大数字加法运算(超过1000位)

前几天,朋友给我一道面试题。我看了看挺有意思的。原题如下:

刚碰到这道题的时候,一直在想怎么存,毕竟已经超过了int类型的存储,后来发现自己好蠢,其实可以还用string类型去存储。那么加法就变得简单多了,分成两个步骤:

一,加法运算,二,进制运算

加法运算如下:

/**
     * 
     * 功能:大数字相加 
     * 参数:@param s1
     * 参数:@param s2
     * 作者:张双亮
     * 日期:2018年11月10日 下午3:33:58
     */
    private static byte[] BigSum(String params1, String params2){
        byte[] s1 = params1.getBytes();
        byte[] s2 = params2.getBytes();
        int lenghtMax = 0; 
        int lenghtMin = 0;
        lenghtMax = lenghtMin = s1.length;
        byte[] tempMax = Arrays.copyOf(s1, lenghtMax);
        byte[] tempMin = Arrays.copyOf(s1, lenghtMin);
        if(s1.length > s2.length){
            lenghtMin = s2.length;
            tempMin = Arrays.copyOf(s2, lenghtMin);
        }else{
            lenghtMax = s2.length;
            tempMax = Arrays.copyOf(s2, lenghtMax);
        }
        byte[] s3 = new byte[lenghtMax];
        int reduce = lenghtMax - lenghtMin;
        for(int j = 0; j < reduce; j++){
            s3[j] = (byte)(tempMax[j] - 48);
        }
        for(int i = 0; i < lenghtMin; i++){
            s3[i+reduce] = (byte) (tempMin[i] + tempMax[i+reduce] - 96);
        }
        return s3;
    }

进制运算如下:

/**
     * 
     * 功能:进制运算 
     * 参数:@param s
     * 参数:@return
     * 作者:张双亮
     * 日期:2018年11月10日 下午4:19:11
     */
    private static String BigDecimal(byte[] s){
        for(int i = s.length-1; i >= 1; i--){
            if(s[i] >= 10){
                s[i] = (byte) (s[i] - 10);
                s[i-1] = (byte) (s[i-1] + 1);
            }
        }
        String str = "";
        for(int i = 0; i < s.length; i++){
            str += ""+s[i]+"";
        }
        return str;
    }

然后就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值