两个超级大数相加,在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 的构造方法要用字符串做参数,用数值做参数有问题。
分享到:
相关推荐
在C++中,这可以通过两个字符串或数组的对应位置相加并处理进位来实现。 3. **超大数的减法**: 减法操作与加法类似,但需要处理借位的情况。如果被减数小于减数,可能需要从高位向低位借位。这需要在C++中进行...
这个函数实现了两个大整数数组`x`和`y`的加法,结果存储在数组`z`中。首先确定数组的最大长度,然后逐位相加,并处理进位。最后更新`z[0]`以表示正确的位数。 4. **高精度减法(subBIG)**: 函数`subBIG`执行大...
- 当两个有理数相除,其商是负数时,这意味着这两个数的符号相反,即一个正数除以负数或者负数除以正数。 5. **科学记数法**: - 科学记数法是一种表示大数或小数的方法,形式为a×10^n,其中1≤|a|,n为整数。在...
1. **科学记数法**:在题目中,"天河二号"超级计算机的运算速度为每秒1.4×10^5亿次,这涉及到科学记数法的使用,即把一个大数表示为一个1到10之间的数字乘以10的幂。 2. **数轴与整数**:题目中提到了大于-2.6而...
接着,他将两个乘数的整百部分相乘得到87000,然后利用平方差公式(50+24)×(50-24)=1924来计算尾部数字,最终将两部分结合得到答案8701924。这种方法展示了如何通过观察和简化来快速找到答案。 亨利·斯塔福德和齐...
4. 同底数幂的乘法规则:当两个或多个同底数幂相乘时,它们的指数相加,底数保持不变。即 \( a^m \times a^n = a^{m+n} \)。这是乘方运算法则的一个基本部分,适用于正整数指数。 5. 示例解析: - \( 2^5 \times 2...