`
lastsoul
  • 浏览: 34797 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

两个超级大数相加【原】

 
阅读更多
两个超级大数相加,在JAVA中可以用BigDecimal实现(BigDecimal类型数据对位数不做限制,理论上可以任意大),也可以通过数组来实现。
BigDecimal能承受多大数,我没有做过验证,但是数组的方式肯定是没有限制的。
BigDecimal实现比较简单:
BigDecimal bd1=new BigDecimal("99999999999999999999943567899999999999");
		BigDecimal bd2=new BigDecimal("987654321");
		System.out.println(bd1.add(bd2));


结果:
99999999999999999999943567900987654320


数组实现:
package test;



public class BigNumAddTest {

	public static void main(String[] args) {
		String data1 = "99999999999999999999943567899999999999";
		String data2 = "987654321";
		String result = add(data1, data2);
		System.out.println(result);
	}

	public static String add(String s1, String s2) {
		StringBuilder sb= new StringBuilder();
		int temp=0;//存放进位
		int tr=0;//存放两个数相加之和(最大18)
		char[] c1=s1.toCharArray();
		char[] c2=s2.toCharArray();
		for(int i=c1.length-1, j=c2.length-1;i>=0 || j>=0;i--,j--){
			if(i<0){
				tr=Integer.valueOf(c2[j]+"")+temp;
			}else if(j<0){
				tr=Integer.valueOf(c1[i]+"")+temp;
			}else{
				tr=Integer.valueOf(c1[i]+"")+Integer.valueOf(c2[j]+"")+temp;
			}
			sb.append(tr%10);
			temp=tr/10;
			//System.out.println("i="+i+"j="+j+"sb="+sb);
		}
		if(temp!=0)
		sb.append(temp);
		return sb.reverse().toString();
	}

}


结果:
99999999999999999999943567900987654320


从上面测试中发现至少这么大的数,二者的结果还是一致的。

另外说一句,BigDecimal 的构造方法要用字符串做参数,用数值做参数有问题。
分享到:
评论

相关推荐

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

    2. 对齐:如果两个大数的位数不一致,可以在较短的大数前面添加零,使得两个大数的位数相同,以便进行逐位相加。 3. 逐位相加:从最低位开始,对两个大数的对应位进行相加,同时考虑进位。每一位的计算遵循小学数学...

    C++大数相加减

    2. 检查两个大数的长度,如果长度不同,将较短的数在其前面补零,以确保它们具有相同的长度。 3. 遍历两个字符串,从低位到高位逐位相加,同时考虑当前位和上一位的进位。 4. 如果在某一位上相加后结果超过9,需要...

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

    2. 检查两个大数的长度,如果一个数的位数多于另一个,可以添加前导零以保持长度一致。 3. 遍历两个数组,从低位到高位,对对应位进行相加,同时考虑进位。 4. 如果有进位,将其加到下一位的和中。 5. 最后,检查...

    两个大数相加的运行程序

    采用单链表的做的,以一万分界点,每个节点有四位数

    用C语言编写两个大数相加

    本资源主要探讨如何使用C语言实现两个超过100位的大数相加,这是对传统整型数据处理能力的扩展,因为C语言的标准整型类型(如int和long)通常无法存储这么大的数值。 C语言本身并不直接支持大数运算,但我们可以...

    大数相加通用模版

    该方法将两个大数(以字符串形式存储)作为输入参数,返回它们的和(同样以字符串形式)。首先,它会判断两个数哪个更长,并将较短的数附加到较长数的末尾,然后逐位进行加法运算。在每一步中,如果当前位的和超过9...

    大数相加.cpp

    该文件为C/C++课程对于大数相加问题的解决, /*大数相加*/ /*在一般语言中对整型数都有个最大限制, 先给出两个超出正常范围的十进制数 对其进行求和,带进位的加法*/

    用c++编写的大数相加

    用c++编写的大数相加,可以实现任意两个长度的大数相加求和。

    java大数相加代码

    java实现大数相加,在不使用BigInteger工具的前提下实现大数相加

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

    5. 最后,结果链表就代表了两个大数的和,可以以适当的形式输出,如转化为字符串。 在这个VS2017项目中,`mytest1.sln`是解决方案文件,包含了整个项目的配置信息。`.vs`文件夹是Visual Studio的工作区文件,包含了...

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

    每一步都是对两个小整数(对应大数的一位)进行乘法,然后根据位的位置正确地放置结果。例如,两个5位数相乘,可以看作是25个二位数的乘法,然后将结果相加。C++中没有内置的大数乘法,因此我们需要自定义数据结构和...

    c++实现大数相加

    大数相加是指将两个或多个大整数相加,得到一个新的大整数。这里的“大整数”是指超出C++标准整数类型范围的整数。 C++中的大数实现 在C++中,我们可以使用字符串来表示大整数,因为字符串可以存储任意长度的数字...

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

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

    【c++】大数相加

    使用string类型实现大数...先将两个加数存为String类型,再从两个加数的末尾开始,一个数一个数的相加,跟做普通加法一个原理,只是这里需要注意的是,两个加数的类型为字符串,需要相应的转换才能相加,在代码有描述。

    用C语言和链表编写的大数相加程序

    用C语言和链表编写的大数相加程序,想学链表的不要错过,程序里的不足请多指教

    C++实现大数相加

    这个程序首先接收两个大数作为输入,然后调用`addBigNumbers`函数进行相加,最后输出结果。注意,这个例子没有处理溢出的情况,如果输入的数字超出`std::string`能表示的最大长度,可能会出现问题。 总的来说,使用...

    大数相加的经典算法))

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

    C++ 两个大数相加.7z

    在给定的"两个大数相加"的场景中,我们可以预期包含的代码将演示如何实现这个功能。下面我们将深入探讨相关的C++知识点。 首先,我们要理解C++的标准库并不直接支持大数运算。因此,我们需要自己设计一个数据结构来...

    实现大数相加功能

    3. **比较大数**:在相加前,可能需要比较两个大数的大小,以便确定相加时的高位。可以从前向后逐位比较,直到找到不同的位或者到达数组末尾。 4. **大数相加**:这是一个关键步骤,可以采用类似于小学数学中的竖式...

    C++大数相加

    C++实现的大数相加,有很好的类的封装性

Global site tag (gtag.js) - Google Analytics