大数相乘问题

题目描述:输入两个整数,要求输出这两个数的乘积。输入的数字可能超过计算机内整形数据的存储范围。

思路:

方法1:
1. 将乘数与被乘数逐位相乘;
2. 将逐位相乘得到的结果,对应相加起来。
3. 可以先不考虑进位,当所有位对应相加,产生结果之后,再考虑如果该位的数字大于10,那么我们用取余运算,在该位上只保留取余运算的结果,而将进位(通过模运算得到)累加到下一位便可。

方法2:
使用BigInteger类来处理大数据。

import java.util.Scanner;

public class TwoBigNumMulti {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        System.out.println("input num1:");
        String s1 = sc.nextLine();
        System.out.println("input num2");
        String s2 = sc.nextLine();
        int[] num1 = new int[s1.length()];
        int[] num2 = new int[s2.length()];
        for(int i=0;i<s1.length();i++){
            num1[s1.length()-i-1] = s1.charAt(i) - '0'; // "12345"-> 5,4,3,2,1
        }
        for(int i=0;i<s2.length();i++){
            num2[s2.length()-i-1] = s2.charAt(i) - '0';
        }
        int[] result = multi(num1, num2);
        for(int i=result.length-1;i>=0;i--){
            System.out.print(result[i]);
        }

    }
    public static int[] multi(int num1[], int num2[]){
        int len1 = num1.length;
        int len2 = num2.length;
        int[] result = new int[len1 + len2];
        for(int i=0;i<len1;i++){
            for(int j=0;j<len2;j++){
                result[i+j] += num1[i]*num2[j];
            }
        }
        for(int i=0;i<result.length-1;i++){
            if(result[i] > 10){
                result[i+1] += result[i]/10;
                result[i] %= 10;
            }
        }
        return result;
    }

}

方法2:

package Alex.Huawei.Test;

import java.math.BigInteger;
import java.util.Scanner;

public class TwoBigNumMulti {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        System.out.println("input num1:");
        String s1 = sc.nextLine();
        System.out.println("input num2");
        String s2 = sc.nextLine();
        BigInteger b1 = new BigInteger(s1);
        BigInteger b2 = new BigInteger(s2);
        BigInteger result = multi1(b1, b2);
        System.out.println(result.toString());

    }

    public static BigInteger multi1(BigInteger b1, BigInteger b2){
        return b1.multiply(b2);
    }


}

你可能感兴趣的:(存储,大数相乘)