`
heisedeyueya
  • 浏览: 97724 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

大整数乘法

 
阅读更多
package org.iSun.heisedeyueya;

public class BigIntegerMultiply {
	public static void main(String args[]) {
		String s1 = "51212126";
		String s2 = "22434565";
		System.out.println(51212126L * 22434565L);
		bigIntegerMultiply(s1, s2);
	}

	public static void bigIntegerMultiply(String a, String b) {
		char[] c1 = a.toCharArray();
		char[] c2 = b.toCharArray();
		int[] integer1 = new int[c1.length];
		int[] integer2 = new int[c2.length];
		// 将字符转换成int类型
		for (int i = 0; i < c1.length; i++) {
			integer1[i] = c1[i] - 48;
		}
		for (int i = 0; i < c2.length; i++) {
			integer2[i] = c2[i] - 48;
		}
		// 存放结果的数组
		int[] result = new int[integer1.length + integer2.length];

		// 每一轮计算中个位的偏移量
		int offset = 0;
		// 乘数的个位到高位顺序取出
		for (int i = integer2.length - 1; i >= 0; i--) {
			// 这一轮乘积的个位数的位置
			int index = offset;
			// 进位
			int count = 0;
			// 模数
			int mod = 0;
			// 被乘数的个位到高位顺序取出
			for (int j = integer1.length - 1; j >= 0; j--) {
				// 乘积加上上一轮的进位
				int temp = integer2[i] * integer1[j] + count;
				// 求模数
				mod = temp % 10;
				// 求进位
				count = temp / 10;
				// 这一轮的模数与本为对其的位求和
				result[result.length - 1 - index] = mod
						+ result[result.length - 1 - index];
				// 求和之后可能进位位的值可能改变,刷新进位位的值
				count = count + result[result.length - 1 - index] / 10;
				// 将新的模数填入到相应的位
				result[result.length - 1 - index] = (result[result.length - 1
						- index]) % 10;
				index++;
			}
			// 本轮计算完成将进位位直接填入到当前的位置
			result[result.length - 1 - index] = count;
			// 偏移量加
			offset++;
		}

		for (int i = 0; i < result.length; i++) {
			System.out.print(result[i]);
		}

	}
}

分享到:
评论
1 楼 clarkhuang 2012-10-09  
学习了

相关推荐

    大整数乘法 c++ 代码

    大整数乘法 c++ 代码 大整数乘法 c++ 代码 大整数乘法 c++ 代码 大整数乘法 c++ 代码 大整数乘法 c++ 代码 大整数乘法 c++ 代码 大整数乘法 c++ 代码 大整数乘法 c++ 代码

    大整数乘法算法选择和分析

    ### 大整数乘法算法选择和分析 #### 引言 大整数乘法在密码学、生物信息学、基因工程等领域具有重要的应用价值。然而,这些数值往往超出了传统编程语言能够直接处理的范围,因此需要特殊的数据结构和算法来支持其...

    大整数乘法的C语言实现

    本项目"大整数乘法的C语言实现"提供了一个简洁的解决方案,能够处理200位的大整数乘法,尽管代码量不大,却充分展示了C语言处理复杂计算的能力。 首先,我们来看大整数乘法的基本原理。传统的小数乘法可以扩展到...

    大整数乘法---快速傅立叶变换(FFT)

    快速傅立叶变换(FFT)是一种高效的计算离散傅立叶变换(DFT)的算法,对于处理大整数乘法具有重要的应用价值。在计算机科学尤其是数学和信号处理领域,FFT是解决复杂数学问题的关键工具。本文将深入探讨FFT在大整数...

    二进制的大整数乘法

    ### 二进制大整数乘法的知识点详解 #### 1. 分治法与大整数乘法 - **分治法基本思想**:分治法是一种将问题分解成若干个规模较小的子问题来解决的方法。这些子问题相互独立且与原问题相同,最后将子问题的解合并...

    大整数乘法分治算法实现

    大整数乘法是计算机科学中的一个重要问题,特别是在处理金融计算、加密算法或者数学运算时。传统的乘法算法,如竖式乘法,对于小整数是有效的,但当涉及非常大的数字时,效率就变得极低。为了解决这个问题,计算机...

    相当不错的大整数乘法算法

    本文将深入探讨一种用于大整数乘法的算法,该算法以数组为数据结构来存储和处理计算过程,具有较高的效率。 标题中的"相当不错的大整数乘法算法"指的是一种能有效处理超出常规整型范围的大整数乘法方法。在描述中...

    Python 实现大整数乘法算法的示例代码

    Python中的大整数乘法是处理超过普通整型范围的大数乘法的一种方法。在Python中,整数类型(int)可以自动处理任意大小的数值,包括大整数。但当我们需要高效地处理大整数乘法时,尤其是对位数较多的数进行运算,就...

    大整数乘法实现(未用分治与递归

    大整数乘法实现(未用分治与递归) 大整数乘法是计算机科学中的一种基本运算,它在密码学、数据加密、科学计算等领域中有着广泛的应用。在本文中,我们将实现大整数乘法的算法,着重于探讨未使用分治与递归的实现...

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

    在本案例中,我们探讨的是如何运用分治法来处理大整数乘法问题。大整数乘法在密码学、计算几何、计算生物学等领域都有广泛应用,特别是在涉及到大量数据计算时,传统的算术运算可能无法胜任,因此需要高效的方法。 ...

    大整数乘法问题_LargeIntegerMulti_algorithm

    在计算机科学领域,处理大整数乘法是一个重要的计算任务,特别是在加密算法、数学软件以及分布式计算中。本文将深入探讨“大整数乘法问题”及其解决方案——分而治之算法,结合“LargeIntegerMulti_algorithm”这个...

    C语言实现大整数乘法

    下面我们将深入探讨C语言实现大整数乘法的相关知识点。 首先,C语言标准库并不直接支持大整数的操作,它提供的`int`、`long`等类型有其存储和运算限制。为了处理大整数,我们需要自定义数据结构。通常,我们会选择...

    大整数乘法的数据结构及算法

    ### 大整数乘法的数据结构及算法 大整数乘法在密码学、生物信息学、基因工程等众多领域中扮演着至关重要的角色。在这些领域中,我们需要处理的整数往往远远超出传统整数类型所能表示的范围,因此,如何设计高效且...

    大整数乘法c语言源文件

    大整数乘法c语言源文件大整数乘法c语言源文件大整数乘法c语言源文件大整数乘法c语言源文件大整数乘法c语言源文件大整数乘法c语言源文件大整数乘法c语言源文件大整数乘法c语言源文件大整数乘法c语言源文件大整数乘法...

    大整数乘法实验报告/vc

    实验报告的标题“大整数乘法实验报告/vc”表明了本次实验的主题是关于大整数乘法的实现,使用的编程环境为VC(Visual C++)。实验的描述提到使用了分治策略来解决大整数乘法问题,并且提供了完整的可运行代码。 大...

    大整数乘法的实现

    ### 大整数乘法的实现 #### 实验背景及目的 随着计算机技术的发展,大整数乘法在密码学、大数据处理等领域有着广泛的应用。然而,在计算机内部,硬件能够直接处理的整数通常受限于一定的位数范围,超出这个范围的...

    大整数乘法实现

    ### 大整数乘法实现解析 在计算机科学中,处理大整数的乘法是一项基本但复杂的任务,尤其当涉及到超出标准数据类型(如`int`或`long`)所能表示的数值范围时。本篇文章将深入探讨一种基于字符串处理的大整数乘法...

Global site tag (gtag.js) - Google Analytics