`
lastsoul
  • 浏览: 35638 次
  • 性别: 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 的构造方法要用字符串做参数,用数值做参数有问题。
分享到:
评论

相关推荐

    C++ 超大数加减乘除幂计算

    在C++中,这可以通过两个字符串或数组的对应位置相加并处理进位来实现。 3. **超大数的减法**: 减法操作与加法类似,但需要处理借位的情况。如果被减数小于减数,可能需要从高位向低位借位。这需要在C++中进行...

    高精度超级必要函数模板

    这个函数实现了两个大整数数组`x`和`y`的加法,结果存储在数组`z`中。首先确定数组的最大长度,然后逐位相加,并处理进位。最后更新`z[0]`以表示正确的位数。 4. **高精度减法(subBIG)**: 函数`subBIG`执行大...

    数学七年级人教新课标第一章有理数单元测试题精选.doc

    - 当两个有理数相除,其商是负数时,这意味着这两个数的符号相反,即一个正数除以负数或者负数除以正数。 5. **科学记数法**: - 科学记数法是一种表示大数或小数的方法,形式为a×10^n,其中1≤|a|,n为整数。在...

    江苏省南京市七年级数学上学期第一次月考试题(无答案) 苏科版 试题.doc

    1. **科学记数法**:在题目中,"天河二号"超级计算机的运算速度为每秒1.4×10^5亿次,这涉及到科学记数法的使用,即把一个大数表示为一个1到10之间的数字乘以10的幂。 2. **数轴与整数**:题目中提到了大于-2.6而...

    小学数学数学故事速算天才们的故事

    接着,他将两个乘数的整百部分相乘得到87000,然后利用平方差公式(50+24)×(50-24)=1924来计算尾部数字,最终将两部分结合得到答案8701924。这种方法展示了如何通过观察和简化来快速找到答案。 亨利·斯塔福德和齐...

    人教同底数幂的乘法优质课获奖作品PPT教案.pptx

    4. 同底数幂的乘法规则:当两个或多个同底数幂相乘时,它们的指数相加,底数保持不变。即 \( a^m \times a^n = a^{m+n} \)。这是乘方运算法则的一个基本部分,适用于正整数指数。 5. 示例解析: - \( 2^5 \times 2...

Global site tag (gtag.js) - Google Analytics