给2个整数,求和。很简单。
那么给出a=1234567898765432123456789,
b=123456789987654321123456789,求和,也不难。
将a逆序然后转化为一个数组,将b做同样的操作。
对同下标的数进行相加,如果结果小于10,则将数放到较长的数组的改下标处,若果结果大于等于10,则进位(在下一个下标处加1),然后可能得到一个新的数组,将数组逆序输出则可以得到结果。

但是,这样写起来不免有些繁琐。

而用到BigInteger,无疑会变得很简单。

BigInteger不是基本数据类型之一,是Java里的一个类,它有点像像String,然而它的初始化方式却没有String那么方便可以直接赋值,而是跟其他自定义的类一样,要调用它的构造器进行初始化。这个类的取值范围原则上是没有上限的,取决于你的计算机的内存。

首先,先介绍他的构造方法:

  • BigInteger(byte[] val) :
    将包含 BigInteger 的二进制补码表示形式的 byte 数组转换为 BigInteger。
  • BigInteger(int signum, byte[] magnitude) :
    将 BigInteger 的符号-数量表示形式转换为 BigInteger。
  • BigInteger(int bitLength, int certainty, Random rnd) :
    构造一个随机生成的正 BigInteger,它可能是一个具有指定 bitLength 的素数。
  • BigInteger(int numBits, Random rnd) :
    构造一个随机生成的 BigInteger,它是在 0 到 (2numBits - 1)(包括)范围内均匀分布的值。
  • BigInteger(String val) :
    将 BigInteger 的十进制字符串表示形式转换为 BigInteger。
  • BigInteger(String val, int radix) :
    将指定基数的 BigInteger 的字符串表示形式转换为 BigInteger。

然后说一些常用的方法:
BigInteger add(BigInteger val):加
BigInteger subtract(BigInteger val):减
BigInteger multiply(BigInteger val):乘
BigInteger divide(BigInteger val):除
BigInteger pow(int ex) 次方
BigInteger abs() 绝对值
int intValue() 返回大整数的整型值
long longValue() 返回大整数的long型值
double doubleValue() 返回大整数的double类型的值
float floatValue() 返回大整数的float类型的值
String toString() 返回此 BigInteger 的十进制字符串表示形式。
String toString(int radix) 返回此 BigInteger 的给定基数的字符串表示形式。
BigInteger max(BigInteger val) 返回此 BigInteger 和 val 的最大值。
BigInteger min(BigInteger val) 返回此 BigInteger 和 val 的最小值。
BigInteger shiftLeft(int n) 将当前大整数左移n位后返回
BigInteger shiftRight(int n) 将当前大整数右移n位后返回

还有更多的方法请自行查找API……

那么对于上面的问题,我们可以这样做:

//这里用到的构造方法是这个--BigInteger(String val) :
BigInteger base1 = new BigInteger("1234567898765432123456789");
BigInteger base2 = new BigInteger("123456789987654321123456789");
//add里面的参数是BigInteger型,很容易因为大意直接写成字符串("1")
BigInteger total = base1.add(base2);

System.out.println(total);

javaint类型加法 java integer 加法_javaint类型加法

很简单的3行代码,就能完成大整数相加的操作。

再来说几个简单的例子:
求2的0次方+2的1次方+2的2次方+……+2的63次方

BigInteger total=new BigInteger("0"); // 当前总数
BigInteger base=new BigInteger("2"); // 基数
for(int i=0;i<64;i++){
    total=total.add(base.pow(i));
}

javaint类型加法 java integer 加法_大整数_02

求50!(50的阶乘)

BigInteger base = new BigInteger("1");
BigInteger index = new BigInteger("1");
BigInteger total = new BigInteger("1");

for (int i = 1; i <= 50; i++) {
    total = total.multiply(index);
    index = index.add(base);
}

System.out.println(total);

javaint类型加法 java integer 加法_大整数_03

希望大家有所收获。