`
to_zoe_yang
  • 浏览: 143345 次
  • 性别: Icon_minigender_2
  • 来自: 01
社区版块
存档分类
最新评论

大数算法(大数相加)

阅读更多
这几天做projecteuler
发现数学很重要啊!
当计算非常大的数的相乘时,使用BigDecimal
便希望能自己实现大数的乘法
因为乘法里要使用加法,就先实现加法了
开始时,大数使用字符串保存
这时候我们需要将大数存储在一个数组里
为了节省空间,我们使用Byte存储每一位

	public static Byte[] StringToByte(String number){
		int len = number.length();
		Byte[] result = new Byte[len];
		//从高位到低位依次转换,转换后字符串"1234"变为4321,这样方便以后计算
		for(int i=0; i<number.length(); i++){
			byte curByte =  Integer.valueOf(number.charAt(i)+"").byteValue();
			result[len-i-1] = curByte;
		}
		
		return result;
	}


加法算法

	public static Byte[] Add(Byte[] number1, Byte[] number2){
		int len = (number1.length>number2.length) ? number1.length : number2.length;
		Byte[] result = new Byte[len+1];
		Integer sum = new Integer(0);
		Integer carry = new Integer(0);
		int i;
		if(number1.length>number2.length){
			for(i=0; i<number2.length; i++){
				sum = number1[i].intValue() + number2[i].intValue();				
				sum = sum +carry;
				carry = ((sum -10)>=0) ? 1:0;
				sum = ((sum -10)>=0) ? (sum-10):sum;
				result[i] = sum.byteValue();
				sum = 0;
			}
			for(;i<number1.length;i++){
				sum = sum +carry;
				carry = ((sum -10)>=0) ? 1:0;
				sum = ((sum -10)>=0) ? (sum-10):sum;
				result[i] = sum.byteValue();
				sum = 0;
			}
			if(carry!=0){
				result[i] = carry.byteValue();
			}else{
				result[i] = 0;
			}
		}else{
			for(i=0; i<number1.length; i++){
				sum = number1[i].intValue() + number2[i].intValue();				
				sum = sum +carry;
				carry = ((sum -10)>=0) ? 1:0;
				sum = ((sum -10)>=0) ? (sum-10):sum;
				result[i] = sum.byteValue();
				sum = 0;
			}
			for(;i<number2.length;i++){
				sum = number2[i].intValue() + carry;
				carry = ((sum -10)>=0) ? 1:0;
				sum = ((sum -10)>=0) ? (sum-10):sum;
				result[i] = sum.byteValue();
				sum = 0;
			}
			if(carry!=0){
				result[i] = carry.byteValue();
			}else{
				result[i] = 0;
			}
		}
		
		return result;
	}
分享到:
评论

相关推荐

    大数相乘算法,java代码,包含独立大数相加算法

    大数相乘算法,java代码,包含独立大数相加算法 其中bigNumberPlus(String s1,String s2)为大数相加方法 bigNumberMultiply(String s1,String s2)为大数相乘方法

    大数相加的经典算法))

    大数相加的算法,很不错,是用字符串的方法

    C++大数相加减

    C++标准库并未提供内置的大数支持,因此要实现大数相加减的功能,通常需要自定义数据结构和算法。这个项目"BigNumberAdd"显然是关于如何用C++来实现大数加法和减法的示例。 首先,我们要创建一个表示大数的数据结构...

    大数运算 大数相加 大数相乘

    本篇文章将详细介绍如何用C/C++实现大数相加和大数相乘。 首先,我们要理解大数的概念。在计算机内部,基本的数据类型如int、long等都有其存储范围限制,对于超出这些范围的整数,就需要用到大数表示。在C/C++中,...

    C++程序设计——大数算法

    在C++编程中,大数算法是处理超过标准整型数据范围的大整数的一种技术。标准的`int`、`long`或`long long`类型无法有效地存储或操作极大的数值,因此,需要自定义数据结构和算法来实现大数运算。本主题将深入探讨...

    大数相加算法

    描述一种大数相加的算法,简单清晰。 使用string 作为主要操作对象。 欧拉13题。

    大数相乘大数相加大数阶乘代码

    需要注意阶乘可能会非常大,可能导致溢出,所以必须使用大数算法。 以下是一个简单的C++实现示例,基于字符串来表示大数: ```cpp #include #include class BigInteger { std::string value; public: // ... ...

    gaojingdu.rar_c 大数加法_c++大数除法_大数 加 减 乘 除_大数算法_高精度

    在标题“gaojingdu.rar_c 大数加法_c++大数除法_大数 加 减 乘 除_大数算法_高精度”中,我们关注的是用C语言和C++实现的高精度算法,特别是大数的加法、减法、乘法和除法。这些操作是基础数学运算,但在计算机中...

    大数相加通用模版

    给定的部分内容展示了如何通过字符串操作实现大数相加的算法。该方法将两个大数(以字符串形式存储)作为输入参数,返回它们的和(同样以字符串形式)。首先,它会判断两个数哪个更长,并将较短的数附加到较长数的...

    两个大数相加-字符串实现

    本主题将深入探讨如何通过字符串实现大数相加,这是一种常见的大数处理方法。 一、大数相加的背景与需求 在日常编程中,我们通常使用诸如int、long等基本数据类型来存储和操作数字。然而,当需要处理的数字非常大...

    大数算法_python_

    例如,两个大数相加可以简单地通过`+`运算符实现,`-`用于减法,`*`用于乘法,`//`用于地板除法(返回不大于商的最大整数),而`%`则用于取模运算。Python还提供了`pow()`函数进行幂运算,可以接受一个可选的第三个...

    c++实现大数相加

    *加密算法:大数相加是许多加密算法的基础,如RSA算法和Diffie-Hellman算法。 *科学计算:大数相加在科学计算中非常重要,如计算π值和e值。 *金融计算:大数相加在金融计算中非常重要,如计算复利和货币兑换。 ...

    大数相加jar包(一个简单算法的实现)

    标题中的“大数相加jar包(一个简单算法的实现)”指的是这个压缩包中包含了一个用Java语言编写的程序,它的主要功能是处理大数的相加操作。在计算机科学中,大数运算通常涉及到处理超过普通整型或浮点型所能表示...

    ACM-----大数算法与组合数学算法

    在ACM国际大学生程序设计竞赛中,大数算法与组合数学算法是常见的挑战之一。大数算法主要处理超出常规整型变量表示范围的数值运算,而组合数学则涉及解决复杂问题时使用的数学理论。以下是对这两种算法的详细介绍: ...

    大数相乘算法c语言

    在C语言中,由于标准库并不直接支持大数运算,我们需要自己实现算法来处理这样的计算。这种算法通常涉及到数组或者链表来存储大数,并通过自定义的逻辑进行操作。以下是对大数相乘算法的详细解释: 1. 数组表示大数...

    数据结构课设一:链表实现大数相加

    在这个课设“数据结构课设一:链表实现大数相加”中,我们主要关注的是链表这一基本数据结构以及如何利用它来解决实际问题,即进行大数的相加运算。 链表是一种线性数据结构,与数组不同,它不连续存储元素,而是...

    实现大数相加功能

    对于这样的情况,我们需要使用特定的数据结构和算法来处理大数运算,例如大数相加。在C语言中,由于其基本数据类型有固定的大小限制,因此实现大数相加功能需要自定义数据结构和相应的操作函数。 一个常见的方法是...

    MFC实现大数相加 C++

    在MFC中实现大数相加,我们需要设计一个类来存储和操作大数,并实现相加的逻辑。 首先,我们可以创建一个名为`BigInt`的类,这个类的实例将代表一个大数。`BigInt`类需要一个字符串成员变量来存储数字,因为C++的...

    大数剧相加

    ### 大数相加算法详解 #### 背景与需求 在计算机编程中,整数类型如 `int` 和 `long` 通常用于表示数值。然而,在某些情况下,我们需要处理超过这些类型所能表示的最大值的数据。例如,在进行非常大的数字(远远...

    C++单链表实现大数加法

    在实现大数加法时,我们需要遍历两个大数对象的每一位数字,然后将其相加,并将结果存储在新的大数对象中。在遍历过程中,我们需要考虑到数字的溢出问题。 最后,我们可以使用输出运算符 friend ostream &operator...

Global site tag (gtag.js) - Google Analytics