`
123003473
  • 浏览: 1069838 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java中两个超大数相加以及BigInteger介绍

    博客分类:
  • java
 
阅读更多
算法1:
public  static  String add(String add1,String add2){
		System.out.println(add1);
		System.out.println(add2);
		String addNum1 = (new StringBuffer(add1)).reverse().toString();
		String addNum2 = (new StringBuffer(add2)).reverse().toString();
		int length1 = addNum1.length();
		int length2 = addNum2.length();
		//tempAdd1的位数多余tempAdd2
		String tempAdd1 = addNum1 ;
		String tempAdd2 = addNum2;
		if(length1<length2){
			tempAdd1 = addNum2;
			tempAdd2 = addNum1;
		}
		StringBuffer sb = new StringBuffer(); 
		int jinWei = 0;
		int tailNum = 0;
		for(int i=0;i<tempAdd2.length();i++){
			int  temp1 = Character.digit(tempAdd2.charAt(i),10);
			int temp2 = Character.digit(tempAdd1.charAt(i),10);
			int total = temp1+ temp2+jinWei;
			if(total>9){
				jinWei = 1;
				tailNum = Character.digit(String.valueOf(total).charAt(1), 10);
			}else{
				jinWei = 0;
				tailNum = total;
			}
			sb.append(tailNum);
		}
		for(int i=tempAdd2.length();i<tempAdd1.length();i++){
			int  temp = Character.digit(tempAdd1.charAt(i),10);
			int  total = temp + jinWei;
			if(total>9){
				jinWei = 1;
				tailNum = 0;
				sb.append(tailNum);
			}else{
				sb.append(total);
				System.out.println(i+1);
				sb.append(tempAdd1.substring(i+1));
				break;
			}
		}
		if(jinWei>0){
			sb.append(jinWei);
		}
		System.out.println(sb.reverse().toString());
		return null;
	}



算法2:
/**
	 *
	 *@parama加数字符串1
	 *@paramb加数字符串2
	 *@return结果字符串
	 *分析:
	 *1、取得两个字符串的长度
	 *2、把两个的长度做比较,并得出较长的长度,及较短的长度
	 *3、把长度较短的加数字符串,在左面补0,使之与较长的字符串一样长
	 *4、从最高位,一个个数的取出来相加,当然首先得转换为整型
	 *5、设置进位,如果两个数相加及加上进位大于等于10,并且这不是最左边一个字符相加,相加结果等于
	 *    (取出1+取出2+进位)-10,并把进位设为1;如果没有大于10,就把进位设为0,如些循环,把
	 *    相加的结果以字符串的形式结合起来,就得到最后的结果
	 */
	String doAdd(String a, String b)
	{
		String str = "";
		int lenA = a.length();
		int lenB = b.length();
		int maxLen = (lenA > lenB) ? lenA : lenB;
		int minLen = (lenA < lenB) ? lenA : lenB;
		String strTmp = "";
		for (int i = maxLen - minLen; i > 0; i--)
		{
			strTmp += "0";
		}
		//把长度调整到相同
		if (maxLen == lenA)
		{
			b = strTmp + b;
		}
		else
		{
			a = strTmp + a;
		}
		int JW = 0;//进位
		for (int i = maxLen - 1; i >= 0; i--)
		{
			int tempA = Integer.parseInt(String.valueOf(a.charAt(i)));
			int tempB = Integer.parseInt(String.valueOf(b.charAt(i)));
			int temp;
			if (tempA + tempB + JW >= 10 && i != 0)
			{
				temp = tempA + tempB + JW - 10;
				JW = 1;
			}
			else
			{
				temp = tempA + tempB + JW;
				JW = 0;
			}
			str = String.valueOf(temp) + str;
		}
		return str;
	}


8种基本数据类型中,long类型所能表示的整数范围是最大的,但还是有限的。另外,基本数据类型中的整数还有一个问题,那就是不是每个数都能够正确的取负数。例如,对int型而言,“-2147483648”取负就不能得到正确的结果,对其他整数类型也有这个问题。

为了解决这些问题,Java中专门提供了用来进行不限制大小的整数计算的类——java.math.BigInteger。该类可以对任意大小的整数进行操作,不过在进行计算的时候是通过方法调用进行的,而不是使用算术运算符


BigInteger b1=new BigInteger("11111111111111111111111111"); 
BigInteger b2=new BigIntege("22222222222222222222222222");           
System.out.println("加法运算:"); 
System.out.println("b1:"+b1); 
System.out.println("b2:"+b2); 
System.out.println("相加结果值"); 
System.out.println("相加后的值:"+b1.add(b2)); 
分享到:
评论

相关推荐

    Java两超大数相加源码

    本文将深入探讨如何使用`BigInteger`类实现两个超大数的相加功能,并讨论相关的重要知识点。 首先,让我们了解`BigInteger`类的基本用法。`BigInteger`对象代表一个不可变的任意精度的整数。它提供了所有标准数学...

    java练习_大数运算_BigInteger.pdf

    2. `add()` 方法:该方法用于将两个 BigInteger 对象相加。 例如:`BigInt1 = BigInt1.add(BigInt2);` 3. `subtract()` 方法:该方法用于将一个 BigInteger 对象从另一个 BigInteger 对象中减去。 例如:`BigInt1...

    Java中BigInteger方法总结

    2. **BigInteger add(BigInteger val)**:返回两个 `BigInteger` 相加的结果。 3. **BigInteger and(BigInteger val)**:返回两个 `BigInteger` 按位与的结果。 4. **BigInteger andNot(BigInteger val)**:返回两个...

    Java中BigInteger.docx

    接着,通过调用 `add` 方法计算这两个数的和,最后打印出结果。 总的来说,`BigInteger` 提供了对大整数的高效且易于使用的支持。在处理大数运算时,它允许开发者避免手动实现复杂的算法,从而提高代码的可读性和...

    java编程实现两个大数相加代码示例

    在Java编程中,实现两个大数相加是一项常见的操作,特别是在高精度计算中。通常情况下,实现大数运算是通过BigInteger和BigDecimal两种方法。这两种方法分别表示不可变的任意精度的整数和不可变的有符号的任意精度的...

    java大数相加

    当两个数值超出标准整型或浮点型数据类型的范围时,Java提供了`java.math.BigInteger`类来处理这样的大数运算。这个类能够表示任意大小的整数,并提供了丰富的数学操作方法,包括加法。本篇文章将深入探讨如何使用`...

    超过Long类型表数范围的大数值相加

    在这个例子中,`num1`和`num2`是两个大整数,通过`add()`方法得到它们的和,即使这个和超过了`Long`类型的表示范围。`BigInteger`类保证了结果的精确性,不会因为溢出而丢失数据。 `BigInteger`类的构造函数接受一...

    java实现大数加法(BigDecimal)的实例代码

    在上述代码中,`b1.add(b2)`就是将`s1`表示的数和`s2`表示的数相加,结果仍然保存为`BigDecimal`类型的对象。最后,我们通过`System.out.println()`将结果打印出来。 虽然`BigDecimal`类提供了精确的计算,但是它的...

    大数加减,两个有几十位的数字相加想减

    对于两个十进制数的加法,我们可以采用列竖式的方法,逐位相加,同时考虑进位。这个原理同样适用于大数的加法,只是处理的位数更多。对于两个大数 `a` 和 `b`,我们可以创建一个与 `a` 和 `b` 长度相同的数组来存储...

    biginteger

    遍历两个大整数的每一位,逐位相加或相减,并处理进位或借位。由于是逆序存储,处理起来需要额外注意。 3. **乘法**:乘法可以使用Karatsuba算法或者更高效的FFT(快速傅里叶变换)算法。简单的方法是将大整数拆...

    大整数相加,计算两个非负整数的和,可以精确计算2的100次方

    5. **库和框架**:许多编程语言提供了内置的大整数支持,如Python的`int`类型,Java的`BigInteger`类,或者C++的GMP库。这些库提供了便捷的方法来处理大整数的加法和其他算术运算,同时确保结果的精确性。 6. **...

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

    描述中提到的“Java语言实现的大数相加程序”,意味着这个程序采用了特定的算法来处理两个大数的加法。简单算法可能是指逐位相加,类似于我们手工计算的方式,即从低位到高位,每两位进行相加,如有进位则向上一位...

    超级大整数相加.zip

    在Java中,可以使用一个循环来遍历两个大整数的位,并使用一个额外的“进位”变量来跟踪任何超出单个数组位置的和。 以下是一个简单的伪代码表示大整数加法的过程: ```markdown 1. 初始化一个空的结果数组,长度...

    任意大的两数相加,输出其和

    在本题中,我们要实现的功能是从键盘接收两个任意大小的整数,然后计算并输出它们的和。这个任务涉及到的主要知识点包括大整数表示、输入输出处理、以及大整数的加法算法。 首先,我们需要理解如何在计算机中表示大...

    Java大数字运算之BigInteger <font color=red>原创</font>

    1. **加法**:`add(BigInteger val)` - 两个BigInteger对象相加。 2. **减法**:`subtract(BigInteger val)` - 从一个BigInteger对象中减去另一个。 3. **乘法**:`multiply(BigInteger val)` - 两个BigInteger对象...

    JAVA大数加法与乘法

    上述代码会创建两个`BigInteger`对象,分别表示12345678901234567890和98765432109876543210,然后将它们相加,结果存储在`sum`变量中。 2. **大数乘法**: 类似地,`BigInteger`提供了`multiply`方法来进行乘法...

    大数相加 java

    3. **逐位相加**:遍历两个反转后的数字字符串,对于每一位,执行以下操作: - 获取两位的和,如果超过10,则将进位设置为1,当前位的结果设为和模10。 - 如果有进位,需要将其加到下一位的和上。 4. **处理负数*...

Global site tag (gtag.js) - Google Analytics