两个超级大数相加,在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. 逐位相加:从最低位开始,对两个大数的对应位进行相加,同时考虑进位。每一位的计算遵循小学数学...
2. 检查两个大数的长度,如果长度不同,将较短的数在其前面补零,以确保它们具有相同的长度。 3. 遍历两个字符串,从低位到高位逐位相加,同时考虑当前位和上一位的进位。 4. 如果在某一位上相加后结果超过9,需要...
2. 检查两个大数的长度,如果一个数的位数多于另一个,可以添加前导零以保持长度一致。 3. 遍历两个数组,从低位到高位,对对应位进行相加,同时考虑进位。 4. 如果有进位,将其加到下一位的和中。 5. 最后,检查...
采用单链表的做的,以一万分界点,每个节点有四位数
本资源主要探讨如何使用C语言实现两个超过100位的大数相加,这是对传统整型数据处理能力的扩展,因为C语言的标准整型类型(如int和long)通常无法存储这么大的数值。 C语言本身并不直接支持大数运算,但我们可以...
该方法将两个大数(以字符串形式存储)作为输入参数,返回它们的和(同样以字符串形式)。首先,它会判断两个数哪个更长,并将较短的数附加到较长数的末尾,然后逐位进行加法运算。在每一步中,如果当前位的和超过9...
该文件为C/C++课程对于大数相加问题的解决, /*大数相加*/ /*在一般语言中对整型数都有个最大限制, 先给出两个超出正常范围的十进制数 对其进行求和,带进位的加法*/
用c++编写的大数相加,可以实现任意两个长度的大数相加求和。
java实现大数相加,在不使用BigInteger工具的前提下实现大数相加
5. 最后,结果链表就代表了两个大数的和,可以以适当的形式输出,如转化为字符串。 在这个VS2017项目中,`mytest1.sln`是解决方案文件,包含了整个项目的配置信息。`.vs`文件夹是Visual Studio的工作区文件,包含了...
每一步都是对两个小整数(对应大数的一位)进行乘法,然后根据位的位置正确地放置结果。例如,两个5位数相乘,可以看作是25个二位数的乘法,然后将结果相加。C++中没有内置的大数乘法,因此我们需要自定义数据结构和...
大数相加是指将两个或多个大整数相加,得到一个新的大整数。这里的“大整数”是指超出C++标准整数类型范围的整数。 C++中的大数实现 在C++中,我们可以使用字符串来表示大整数,因为字符串可以存储任意长度的数字...
大数相乘算法,java代码,包含独立大数相加算法 其中bigNumberPlus(String s1,String s2)为大数相加方法 bigNumberMultiply(String s1,String s2)为大数相乘方法
使用string类型实现大数...先将两个加数存为String类型,再从两个加数的末尾开始,一个数一个数的相加,跟做普通加法一个原理,只是这里需要注意的是,两个加数的类型为字符串,需要相应的转换才能相加,在代码有描述。
用C语言和链表编写的大数相加程序,想学链表的不要错过,程序里的不足请多指教
这个程序首先接收两个大数作为输入,然后调用`addBigNumbers`函数进行相加,最后输出结果。注意,这个例子没有处理溢出的情况,如果输入的数字超出`std::string`能表示的最大长度,可能会出现问题。 总的来说,使用...
大数相加的算法,很不错,是用字符串的方法
在给定的"两个大数相加"的场景中,我们可以预期包含的代码将演示如何实现这个功能。下面我们将深入探讨相关的C++知识点。 首先,我们要理解C++的标准库并不直接支持大数运算。因此,我们需要自己设计一个数据结构来...
3. **比较大数**:在相加前,可能需要比较两个大数的大小,以便确定相加时的高位。可以从前向后逐位比较,直到找到不同的位或者到达数组末尾。 4. **大数相加**:这是一个关键步骤,可以采用类似于小学数学中的竖式...
C++实现的大数相加,有很好的类的封装性