zoukankan      html  css  js  c++  java
  • Java实现大数乘法运算

    基本思路:将输入的两个大数以字符串的形式存储,然后转化成整型数组存储,通过整型数组进行乘法运算(采用分治的思想)

    即乘法分配律,如AB*CD=AC(AD+BC)BD,将两个数组逐位相乘的结果对位存放在新的数组里,再对新数组进行进位判定,进位结束后将新数组转化成字符串输出。

    实现代码如下:

    import java.util.Scanner;
    
    //创建类largenumberOperationMultiply
    public class largenumberOperationMultiply {
    
        //定义方法multiply的功能
        public String multiply(String str1,String str2){
            int[] num1 = new int[str1.length()];
            int[] num2 = new int[str2.length()];
            int[] result = new int[str1.length() + str2.length()];
    
            //将两个字符串转成整型数组,顺序转换,数组下标越小,数字对应的位数越高
            for (int i = 0;i < str1.length(); i++){
                num1[i] = Integer.parseInt(str1.substring(i,i+1));
            }
            for (int i = 0;i < str2.length(); i++){
                num2[i] = Integer.parseInt(str2.substring(i,i+1));
            }
    
            //两大数相乘
            for (int a = 0;a < str1.length(); a++){
                for (int b = 0;b < str2.length(); b++){
                    result[a+b] += num1[a]*num2[b];
                }
            }
    
            ////判断是否需要进位,满10进1,因为存储顺序与位数高低相反,所以采用逆序进位
            int temp;
            for (int k = result.length-1; k > 0; k--){
                    temp=result[k]/10;  //数组下标大的向数组下标小的进位
                    result[k-1] += temp;
                    result[k] = result[k]%10;
                }
    
            //将结果数组逆序转化为字符串
            String resultstr = "";
            for (int i = 0; i < result.length-1; i++){
                resultstr += "" + result[i];
            }
    
            return resultstr;
        }
    
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入第一个数:");
            String str1 = sc.next();
            System.out.println("请输入第二个数:");
            String str2 = sc.next();
            largenumberOperationMultiply bn = new largenumberOperationMultiply();
            //创建类largenumberOperationMultiply的对象bn
            String output = bn.multiply(str1,str2);
            //bn对象调用multiply方法对str1和str2进行操作
            System.out.println(str1+"与"+str2+"的积为="+output);
        }
    }
  • 相关阅读:
    安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置
    各种编程语言的深度学习库整理
    十个开源深度学习框架
    深度学习框架的评估与比较
    Caffe 深度学习框架上手教程
    机器视觉开源代码集合
    人工智能的妙用:谷歌公布图像字幕技术
    谷歌推出最新图像识别工具Google Cloud Vision API
    机器学习常见算法分类汇总
    神经网络的分类及其应用
  • 原文地址:https://www.cnblogs.com/edward-life/p/10506101.html
Copyright © 2011-2022 走看看