大数相乘

代码如下:

public class Mutiply {

    public static void main(String[] args){

        String str1 = "7832974972840919321747983209327";
        String str2 = "1987432091904327543957";
        System.out.println(multiply(str1,str2));

    }
    public static String multiply(String num1,String num2){

        int len1 = num1.length();
        int len2 = num2.length();
        //结果最大长度len1+len2,最小为len1+len2-1
        int[] num = new int[len1+len2]; //数组默认初始化均为0
        for(int i=0;i<len2;i++){

            int n1 = num2.charAt(len2-1-i)-'0';
            int tmp = 0; //表示进位
            for(int j=0;j<len1;j++){
                int n2 = num1.charAt(len1-1-j)-'0';
                tmp = tmp + num[i+j] + n1*n2;
                num[i+j] = tmp%10;
                tmp = tmp/10;
            }
            num[len1+i] = tmp; //下面的数与上面最高位相乘得到的那个进位

        }
        //现在数组中存的是从个位开始到高位,所以需要倒过来
        //先找到数组中从后面开始不为0的数,该数为最高位。
        int i = len1+len2-1;
        while(i>=0 && num[i]==0){
            i--;
        }
        String result = "";
        while(i>=0){
            result+=num[i--];
        }
        return result;
    }
}