最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

进行整数运算时,如果长度超过long的长度该怎么办呢?

业界 admin 5浏览 0评论

这是一道今天遇到的面试题:50位的整数如何进行运算

经过我的思考,花费两个小时,中间推翻思路重写,最终写出来了下面的代码.思路是将两个整数以字符串的方式进行存储,之后将两个字符串转换成数组,然后通过一点代码逻辑进行相加.但是有趣的是,代码刚写完我就知道了BigInteger这个类.
经过测试解决了 9999+1 =00 以及 1111+9999=0000 的bug
    public static String mathAdd(String strOne, String strTwo) {
//        System.out.println("两数相加:" + (Long.parseLong(strOne) + Long.parseLong(strTwo)));
         
        //求出比较长的字符串作为被加数  小的数作为加数
        //求出两个字符串长度的差
        int differ = strOne.length() - strTwo.length();
        differ = Math.abs(differ);
        String strMax = strOne.length() < strTwo.length() ? strTwo : strOne;
        String strMin = strOne.length() < strTwo.length() ? strOne : strTwo;
        //将两个字符串转换成数组
        String[] strMaxs = strMax.split("");
        String[] strMins = strMin.split("");
        //然后开始for循环进行运算
        //在这里是从个位是开始相加,倒着循环
        int carry = 0;
        for (int i = strMaxs.length - 1; i >= 0; i--) {
            //将两个字符转成int
            int numMax = Integer.parseInt(strMaxs[i]);
            int numMin = 0;
            //如果长度短的数组遍历完后,默认设置为0,
            if (i - differ >= 0) {
                numMin = Integer.parseInt(strMins[i - differ]);
            }
            int sum = numMax + numMin + carry;
            carry = 0;
            //如果大于9,向上一位进 1
            if (sum > 9) {
                carry = 1;
                sum -= 10;
            }
            strMaxs[i] = sum +"";
            //如果到最后一次循环,还要进一位 在数组第一个元素前面+1  比如 3  变成 13
            if (i == 0 && carry == 1) {
                strMaxs[0] = "1" + strMaxs[0];
            }
        }
        //处理结果
        String result = "";
        for (String max : strMaxs) {
            result += max;
        }
        System.out.println("处理结果:" + result);

        return result;
    }

这是一道今天遇到的面试题:50位的整数如何进行运算

经过我的思考,花费两个小时,中间推翻思路重写,最终写出来了下面的代码.思路是将两个整数以字符串的方式进行存储,之后将两个字符串转换成数组,然后通过一点代码逻辑进行相加.但是有趣的是,代码刚写完我就知道了BigInteger这个类.
经过测试解决了 9999+1 =00 以及 1111+9999=0000 的bug
    public static String mathAdd(String strOne, String strTwo) {
//        System.out.println("两数相加:" + (Long.parseLong(strOne) + Long.parseLong(strTwo)));
         
        //求出比较长的字符串作为被加数  小的数作为加数
        //求出两个字符串长度的差
        int differ = strOne.length() - strTwo.length();
        differ = Math.abs(differ);
        String strMax = strOne.length() < strTwo.length() ? strTwo : strOne;
        String strMin = strOne.length() < strTwo.length() ? strOne : strTwo;
        //将两个字符串转换成数组
        String[] strMaxs = strMax.split("");
        String[] strMins = strMin.split("");
        //然后开始for循环进行运算
        //在这里是从个位是开始相加,倒着循环
        int carry = 0;
        for (int i = strMaxs.length - 1; i >= 0; i--) {
            //将两个字符转成int
            int numMax = Integer.parseInt(strMaxs[i]);
            int numMin = 0;
            //如果长度短的数组遍历完后,默认设置为0,
            if (i - differ >= 0) {
                numMin = Integer.parseInt(strMins[i - differ]);
            }
            int sum = numMax + numMin + carry;
            carry = 0;
            //如果大于9,向上一位进 1
            if (sum > 9) {
                carry = 1;
                sum -= 10;
            }
            strMaxs[i] = sum +"";
            //如果到最后一次循环,还要进一位 在数组第一个元素前面+1  比如 3  变成 13
            if (i == 0 && carry == 1) {
                strMaxs[0] = "1" + strMaxs[0];
            }
        }
        //处理结果
        String result = "";
        for (String max : strMaxs) {
            result += max;
        }
        System.out.println("处理结果:" + result);

        return result;
    }

发布评论

评论列表 (0)

  1. 暂无评论