大数的计算

来源:互联网 发布:t20天正建筑软件 编辑:程序博客网 时间:2024/05/18 00:00

最近由于系统的要求,需要做一个辅助的功能大数的十进制、十六进制的计算,在网上找到很多资料都不是很全面,所以我在此记录一下大数的计算器的后台的代码。

/**
 * 十进制的加、减、乘、除、mod、求逆的运算
 * */
public class BigIntegerDemo {


/**
* 加法
* */
public static BigInteger add(String value1,String value2){

BigInteger b1=new BigInteger(value1);
BigInteger b2=new BigInteger(value2);
return b1.add(b2);

}

/**
* 减法
* */
public static BigInteger sub(String value1,String value2){

BigInteger b1=new BigInteger(value1);
BigInteger b2=new BigInteger(value2);
return b1.subtract(b2);
}

/**
* 乘法
* */
public static BigInteger mul(String value1,String value2){

BigInteger b1=new BigInteger(value1);
BigInteger b2=new BigInteger(value2);
return b1.multiply(b2);

}


/**
* 除法
* */
public static BigInteger div(String value1,String value2){

BigInteger b1=new BigInteger(value1);
BigInteger b2=new BigInteger(value2);
return b1.divide(b2);


}

/**
* 取模
* */
public static BigInteger mod(String value1,String value2){

BigInteger b1=new BigInteger(value1);
BigInteger b2=new BigInteger(value2);
return b1.mod(b2);


}

/**
* 求逆
* */
public static BigInteger inverse(String value1,String value2){

BigInteger b1=new BigInteger(value1);
BigInteger b2=new BigInteger(value2);

BigInteger modInverseValue;

try {
modInverseValue=b1.modInverse(b2);
} catch (Exception e) {

//当不能求逆的时候返回的值为0

modInverseValue=new BigInteger("0");
}
return modInverseValue;
}


}


/**
 * 十六进制的加、减、乘、除、mod、求逆的运算
 * */
public class HexBigInteger {

/**
* 加法
* */
public static String add(String value1,String value2){

BigInteger b1=new BigInteger(value1,16);
BigInteger b2=new BigInteger(value2,16);
   BigInteger addValue= BigIntegerDemo.add(b1.toString(10), b2.toString(10));
return addValue.toString(16);

}

/**
* 减法
* */
public static String sub(String value1,String value2){

BigInteger b1=new BigInteger(value1,16);
BigInteger b2=new BigInteger(value2,16);
BigInteger subValue= BigIntegerDemo.sub(b1.toString(10), b2.toString(10));

return subValue.toString(16);
}

/**
* 乘法
* */
public static String mul(String value1,String value2){

BigInteger b1=new BigInteger(value1,16);
BigInteger b2=new BigInteger(value2,16);
BigInteger mulValue= BigIntegerDemo.mul(b1.toString(10), b2.toString(10));
return mulValue.toString(16);

}

/**
* 除法
* */
public static String div(String value1,String value2){

BigInteger b1=new BigInteger(value1,16);
BigInteger b2=new BigInteger(value2,16);
BigInteger divValue= BigIntegerDemo.div(b1.toString(10), b2.toString(10));
return divValue.toString(16);


}

/**
* 取模
* */
public static String mod(String value1,String value2){

BigInteger b1=new BigInteger(value1,16);
BigInteger b2=new BigInteger(value2,16);
BigInteger modValue= BigIntegerDemo.mod(b1.toString(10), b2.toString(10));
return modValue.toString(16);


}

/**
* 求逆
* */
public static String inverse(String value1,String value2){

BigInteger b1=new BigInteger(value1,16);
BigInteger b2=new BigInteger(value2,16);
BigInteger inverseValue= BigIntegerDemo.inverse(b1.toString(10), b2.toString(10));
return inverseValue.toString(16);
}


public static void main(String[] args) {

// System.out.println("加法="+add("abababaababaabababaccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","dfaaaaaabbbbbbbb13542353425634634635656"));
// System.out.println("减法="+sub("abababaababaabababaccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","dfaaaaaabbbbbbbb13542353425634634635656"));
// System.out.println("成法="+mul("abababaababaabababaccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","dfaaaaaabbbbbbbb13542353425634634635656"));
// System.out.println("除法="+div("abababaababaabababaccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","dfaaaaaabbbbbbbb13542353425634634635656"));
// System.out.println("mod="+mod("abababaababaabababaccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","dfaaaaaabbbbbbbb13542353425634634635656"));
// System.out.println("求逆="+inverse("abababaababaabababaccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","dfaaaaaabbbbbbbb13542353425634634635656"));

BigInteger b1=new BigInteger("147429890135226316801");
BigInteger b2=new BigInteger("14736494398871999483");
BigInteger b3=b1.multiply(b2);
BigInteger b4=new BigInteger("2");
System.out.println(b3.multiply(b4));

}

}