`
greemranqq
  • 浏览: 977113 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

两个大数字乘法

阅读更多
 /**
     * 默认最大长度50位,可以调节,或者动态判断都行
     */
    static String[] all = new String[50];

    public static void main(String[] args) {
        System.out.println(multiply(Long.MAX_VALUE, Long.MAX_VALUE));
        System.out.println(multiply1(Long.MAX_VALUE, Long.MAX_VALUE));

    }


    private static String multiply1(Long a, Long b) {
        char[] as = a.toString().toCharArray();
        char[] bs = b.toString().toCharArray();
        for (int p1=0,i = as.length-1; i > -1; i--,p1++) {
            for (int p2=p1,j = bs.length-1; j > -1; j--,p2++) {
                Integer num = Integer.parseInt(bs[j]+"") * Integer.parseInt(as[i]+"");
                int pos = p2;
                addNum(num % 10, pos);
                if (num > 10) {
                    addNum(num / 10, pos+1);
                }
            }
        }
        for(int x = all.length -1  ;x > -1;x--){
            if(all[x] != null){
                System.out.print(all[x]);
            }
        }
        return "";
    }

    private static void addNum(int num, int i) {
        if (all[i] == null) {
            all[i] = "0";
        }
        Integer s1 = Integer.parseInt(all[i]);
        s1 = s1 + num;
        if (s1 >= 10) {
            all[i] = String.valueOf(s1 - 10);
            addNum(s1 / 10, i + 1);
        } else {
            all[i] = String.valueOf(s1);
        }

    }

    /**
     * JDK 提供,可以看看优化
     * @param x
     * @param y
     * @return
     */
    private static String multiply(long x, long y) {
        BigDecimal a = new BigDecimal(x);
        BigDecimal b = new BigDecimal(y);
        return a.multiply(b).toString();
    }

 

分享到:
评论

相关推荐

    大数字加法和乘法

    **大数字乘法:** 大数字的乘法则相对复杂,常见的算法有Karatsuba算法和Toom-Cook算法,它们都是分治策略的应用,可以将乘法分解成较小的乘法。但最基础的方法是基于长乘法,就像我们手工做两位数乘法那样,只不过...

    用bigint类编写大数字乘法

    用C++编写bigint类型,实现超过float容量的大数字乘法

    大整数乘法(分治法)

    Multiply 函数将两个大整数分解成子整数,计算每个子整数的乘积,并组合结果以得到最终的乘积。 在实验中,我们遇到了许多问题,例如迭代器问题、重复定义和非法复值等。这时,需要认真分析问题的原因,并采取相应...

    大整数乘法的C语言实现

    将两个大整数看作由多个“位”组成,每个“位”是一个较小的数值(例如,单个的十进制数字)。然后,我们将一个数的每一位与另一个数的所有位进行逐个相乘,并将结果累加,最后考虑进位。这种算法被称为Karatsuba...

    大数乘法运算,用于实现两个大整数之间的运算,效率非常高!

    大数乘法的基本思想是分治策略,即把两个大数拆分成更小的部分,分别相乘,然后再将结果合并。最常见的算法是Karatsuba算法和Toom-Cook算法,这些算法比传统的学校乘法(也称为长乘法)更为高效。不过,对于非常大的...

    数字乘法器的概念及其主要误差分析

    数字乘法器是一种用于计算两个数字信号乘积的设备,它利用数字信号处理技术实现传统模拟乘法器的功能。与模拟乘法器相比,数字乘法器具有更高的精度、稳定性以及抗干扰能力。其工作原理基于将模拟信号转换为数字信号...

    分治法求两个大整数相乘

    对于两个大整数的乘法问题,我们可以采用分治法的思想将其分解为更小规模的乘法问题。具体步骤如下: 1. 将输入的大整数分为两部分,例如对于一个长度为 \( n \) 的数字字符串,可以将其分为长度大致相等的两个子串...

    二进制的大整数乘法

    - **分治法应用于大整数乘法**:利用分治法,可以将一个大整数分解为几个较小的部分,分别对这些部分进行乘法运算,最后将结果合并起来。这种方法特别适用于处理位数很多的大整数乘法问题,尤其是当位数是2的整数幂...

    大整数乘法的实现

    本实验旨在通过学习和实践分治法的思想,实现两个大整数的乘法。 #### 实验环境 实验使用的开发环境是 Visual C++ 6.0,这是一种常用的 C++ 开发工具,适用于 Windows 平台下的程序开发。选择 C++ 作为开发语言是...

    C语言实现大整数乘法

    7. **接口设计**:为了让其他程序能够方便地使用大整数乘法功能,提供易于使用的API,如`BigInt* multiply(BigInt* a, BigInt* b)`,返回两个大整数的乘积。 在提供的`cjw.EXE`文件中,很可能包含了上述概念的实现...

    任意长度的两个浮点数的以乘法

    在本文中,我们将深入探讨如何实现任意长度的两个浮点数的乘法,以及在VC6.0环境下编译和运行相关程序。 首先,让我们了解浮点数的表示。浮点数在计算机内部通常遵循IEEE 754标准,分为单精度(32位)和双精度(64...

    大整数乘法分治算法实现

    在大整数乘法中,分治法通过将两个大整数拆分为较小的部分,然后递归地计算这些部分的乘积,最终组合出整个乘积。 Karatsuba算法由Alexander Karatsuba于1960年提出,其基本思想是:假设我们有两个n位的大整数A和B...

    大整数乘法实现

    1. **输入获取与预处理**:首先,程序接收用户输入的两个大整数,并将其存储为字符串类型。这是因为字符串可以无限制地存储任意长度的数字,而不会受到数值类型大小限制的影响。 2. **内存分配**:为了存储中间计算...

    大整数乘法问题_LargeIntegerMulti_algorithm

    在大整数乘法问题上,我们可以将两个大整数分成更小的部分,分别进行乘法运算,再组合这些乘积得到最终答案。 以Karatsuba算法为例,假设我们要计算两个数A和B,每个数有n位。首先,我们将A和B各分为两半,得到A1, ...

    C语言链表实现大整数乘法

    1. 初始化两个输入链表,分别表示两个大整数。 2. 将较短的链表复制一份,并反转,然后与较长的链表进行逐位比较,进行“折半相乘”。 3. 折半相乘的过程是,将一个数的每一位乘以另一个数,然后根据位值进行累加。...

    乘法器_乘法器vivado_vivado乘法器_verilog_vivado乘法器_vivado乘法ip核_

    在数字电路设计中,乘法器是至关重要的元件,它能执行两个数字的乘法运算。在现代的FPGA(Field-Programmable Gate Array)设计中,Vivado工具提供了一个强大的平台来实现这样的功能。本文将深入探讨如何利用Vivado...

    两个10位以上大整数相乘 算法 设计

    1. **输入接收**:首先,使用字符数组接收用户输入的两个大整数,这是因为C++的标准输入流`cin`无法直接处理超过`int`类型的整数。字符数组可以用来存储任意长度的字符串形式的数字。 2. **数据转换**:接收到的...

    大整数乘法C语言版本

    在大整数乘法中,分治思想被用来将两个大整数的乘法转换为多个较小整数的乘法,从而减少计算复杂性。 **Karatsuba算法**是分治思想在大整数乘法中的经典应用,由Karatsuba在1960年提出。这个算法将两个n位的大整数A...

    分治法求大整数乘法(可运行)

    “大整数乘法”是指两个超出常规整型范围的大数之间的乘法操作,例如两个1000位的数相乘。由于常规的算术运算符不能处理这种规模的数字,所以需要专门的算法。在计算机科学中,Karatsuba算法和Toom–Cook算法是一些...

Global site tag (gtag.js) - Google Analytics