码迷,mamicode.com
首页 > 其他好文 > 详细

大数相乘

时间:2017-08-02 10:15:22      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:package   java   oid   大数   思考   pac   min   求和   static   

这道题考了几遍了,一直写的不完美。刚好有空思考了下,其实思路还是挺清晰的。

总共设2个辅助数组,一个记录第k位 的累加和val[ ], 一个记录第k位产生的进位。carry[ ]  

然后就是循环去做吧,不过要先把数组逆序去求和,因为数组存储顺序和我们习惯的竖式计算方法顺序相反。

先贴代码。(一些特殊情况暂未考虑)

package PDD._1;

/**
 * Created by Administrator on 2017/8/2 0002.
 */
public class _BigNumberMulti {
    public static void main(String[] args){
        String str1 = "19287509125012";
        String str2 = "40241046016719";
        char[] chas1 = str1.toCharArray();
        char[] chas2 = str2.toCharArray();

        System.out.println(getResult(chas1, chas2));//771500365000480482092033438
    }

    public static String getResult(char[] chas1, char[] chas2){
        if(chas1 == null || chas1.length == 0 || chas2 == null || chas2.length == 0){
            return "";
        }
        reverse(chas1);
        reverse(chas2);
        int[] val = new int[chas1.length + chas2.length];
        int[] carry = new int[chas1.length + chas2.length];
        for(int i = 0; i < chas1.length; i++){ // 先遍历一遍求累加和
            for(int j = 0; j < chas2.length; j++){
                val[i + j] += (chas1[i] - ‘0‘) * (chas2[j] - ‘0‘);
            }
        }

        for(int k = 0; k < chas1.length + chas2.length - 1; k++){ //再遍历一遍求单位累加和与进位
            int tmp = val[k] + (k > 0 ? carry[k-1] : 0);
            val[k] = tmp % 10;
            carry[k] = tmp / 10;
        }

        StringBuilder sb = new StringBuilder();  //输出吧!
        if(carry[chas1.length + chas2.length -2] != 0){
            sb.append(carry[chas1.length + chas2.length -2]);
        }
        for(int i = chas1.length + chas2.length - 2; i >= 0; i--){
           sb.append(val[i]);
        }
        return sb.toString();
    }

    public static void reverse(char[] chas){
        int len = chas.length;
        for(int i = 0, j = len - 1; i < j; i++, j--){
            char tmp = chas[i];
            chas[i] = chas[j];
            chas[j] = tmp;
        }
    }
}

  

大数相乘

标签:package   java   oid   大数   思考   pac   min   求和   static   

原文地址:http://www.cnblogs.com/CodeCafe/p/7271954.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!