java中大数运算非常方便
但要记住一些函数
首先是 头文件:import java.math.BigInteger;
BigInteger a =in.nextBigInteger(); 定义一个大数a,并且输入
1.a.add(b); a+b
2.a.subtract(b); a-b
3.a.multiply(b); a*b
4.a.divide(b); a/b
5.a.remainder(b); a%b
6.a.gcd(b); gad(a,b)
7.a!
BigInteger m;
m =BigInteger.valueOf(1);//BigInteger.valueOf();为定义一个已知大数.
int x;
x=in.nextInt();
for(int j=1;j<=x;j++)
{
m=m.multiply(BigInteger.valueOf(j));
}
System.out.println(m);
完整代码:
import java.util.Scanner;
import java.math.BigInteger;
public class Largenumber {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in =new Scanner(System.in);
System.out.println("输入两个大数:");
BigInteger a =in.nextBigInteger();
BigInteger b =in.nextBigInteger();
System.out.println("输入操作\n1.加法\n2.减法\n3.乘法\n4.除法\n5.取余\n6.最大公约数\n7.求阶乘");
int n=in.nextInt();
System.out.println("result:");
if(n==1)
{
System.out.println(a.add(b)); ///a+b
}
else if(n==2)
{
System.out.println(a.subtract(b)); ///
}
else if(n==3)
{
System.out.println(a.multiply(b)); ///a*b
}
else if(n==4)
{
System.out.println(a.divide(b)); ///a/b
}
else if(n==5)
{
System.out.println(a.remainder(b)); ///a%b
}
else if(n==6)
{
System.out.println(a.gcd(b)); ///gcd(a,b)
}
else ///a!
{
BigInteger m;
m =BigInteger.valueOf(1);//BigInteger.valueOf();为定义一个已知大数.
int x;
x=in.nextInt();
for(int j=1;j<=x;j++)
{
m=m.multiply(BigInteger.valueOf(j));
}
System.out.println(m);
}
}
}
BigDecimal
加:add(BigDecima)
减:subtract(BigDecimal)
乘:multiply(BigDecimal)
除:divide(BigDecimal)
乘方:pow(int)
取绝对值:abs()
取反:negate()
对比:compareTo(BigDecimal)
设置小数点精确度:setScale(int)
设置保留小数点精确度并添加保留方式(直接加1或者四舍五入):setScale(int, int)
1、ROUND_UP
舍入远离零的舍入模式。
在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。
注意,此舍入模式始终不会减少计算值的大小。
2、ROUND_DOWN
接近零的舍入模式。
在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。
注意,此舍入模式始终不会增加计算值的大小。
3、ROUND_CEILING
接近正无穷大的舍入模式。
如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;
如果为负,则舍入行为与 ROUND_DOWN 相同。
注意,此舍入模式始终不会减少计算值。
4、ROUND_FLOOR
接近负无穷大的舍入模式。
如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;
如果为负,则舍入行为与 ROUND_UP 相同。
注意,此舍入模式始终不会增加计算值。
5、ROUND_HALF_UP
向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。
如果舍弃部分 >= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。
注意,这是我们大多数人在小学时就学过的舍入模式(四舍五入)。
6、ROUND_HALF_DOWN
向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。
如果舍弃部分 > 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同(五舍六入)。
7、ROUND_HALF_EVEN
向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;
如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。
注意,在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。
此舍入模式也称为“银行家舍入法”,主要在美国使用。四舍六入,五分两种情况。
如果前一位为奇数,则入位,否则舍去。
以下例子为保留小数点1位,那么这种舍入方式下的结果。
1.15>1.2 1.25>1.2
8、ROUND_UNNECESSARY
断言请求的操作具有精确的结果,因此不需要舍入。
如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException。
-----------------------------------------------------------------------
a.setScale(2,BigDecimal.ROUND_HALF_UP ) //a保留两位小数
package abigDecimal;
import java.util.Scanner;
import java.math.BigDecimal;
public class test {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in=new Scanner(System.in);
BigDecimal a,c;
int flag=0;
a=in.nextBigDecimal();
c=new BigDecimal("0");
if(a.compareTo(c)<0)
{
flag=1;
}
if(flag==1){
System.out.print("(");
}
a=a.abs();
System.out.print(a.setScale(2,BigDecimal.ROUND_HALF_UP ));
if(flag==1){
System.out.print(")\n");
}
}
}