您好,登录后才能下订单哦!
这篇文章主要介绍“Java中BigInteger怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java中BigInteger怎么使用”文章能帮助大家解决问题。
在java中经常会遇到比较大的数,甚至超过了long型,那么该如何处理这些“大数据”呢?在java中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,从原则上是可以表示“天文单位”一样大的数字咯,但有一个缺点就是比较费内存!
在这里,我们详细描述下BigInteger的用法,在使用之前,我们需要导入java.math.*包
①value.Of(参数); 这个函数的作用是将括号内的参数转换成指定的数据类型,例如以下例子
int A=42; BigInteger f=BigInteger.valueOf(A); System.out.println("f="+f); //输出的f将会等于BigInteger型的42 // 答案: f=42
其实还可以转成其他的类型,例如以下以下,※※※需要注意的是不重写的话,jdk1.8 版本是无法支持这种转换的※※※
String s="12345"; BigInteger c=BigInteger.valueOf(s); // 则c=12345;※※※需要注意的是不重写的话,jdk1.8 版本是无法支持这种转换的
②add()方法; 这个函数的作用是将大整数加起来,例如以下例子
BigInteger c=new BigInteger("6"); BigInteger d=new BigInteger("3"); System.out.println("c+d="+c.add(d)); //答案输出: c+d=9
③subtract()方法,这个函数的作用是将大整数相减,例如以下例子,运用时前者减后者
BigInteger c=new BigInteger("5"); BigInteger d=new BigInteger("3"); System.out.println("d-c="+d.subtract(c)); //答案输出: d-c=-2
④multiply()方法,这个函数的作用是将大整数相乘,例如以下例子,
BigInteger c=new BigInteger("6"); BigInteger d=new BigInteger("3"); System.out.println("c*d="+c.multiply(d)); //答案输出: c*d=18
⑤divide()方法,这个函数的作用是将大整数做除法,例如以下例子,
BigInteger c=new BigInteger("6"); BigInteger d=new BigInteger("4"); System.out.println("c/d="+c.divide(d)); // 答案输出;c/d=1
⑥remainder()方法,这个函数的作用是将大整数取余
⑦pow(exponent)方法,这个函数的作用是将大整数取exponent的指数,例如a.pow(b)==a^b;
⑧gcd()方法,这个函数的作用是将两个大整数取最大公约数,例如a.gcd(b);
⑨abs()方法,这个函数的作用是取绝对值,例如
BigInteger c=new BigInteger("-9"); System.out.println(c.abs()); //答案输出: 9
⑩negate()方法,这个函数的作用是取数的相反数,例如
BigInteger c=new BigInteger("9"); System.out.println(c.negate()); // 答案输出: -9
⑪mod()方法; 这个函数的作用是对数进行取余 a.mod(b)=a%b=a.remainder(b);
⑫max()方法,min()方法,分别是比较两个数的大小,例如a.max(b); 取a,b中的最大值
⑬compareTo()方法这个方法是用来比较两个大整数大小的
public void testCompare() { BigInteger bigNum1 = new BigInteger("52"); BigInteger bigNum2 = new BigInteger("27"); //1.compareTo():返回一个int型数据(1 大于; 0 等于; -1 小于) int num = bigNum1.compareTo(bigNum2); //1 //2.max():直接返回大的那个数,类型为BigInteger // 原理:return (compareTo(val) > 0 ? this : val); BigInteger compareMax = bigNum1.max(bigNum2); //52 //3.min():直接返回小的那个数,类型为BigInteger // 原理:return (compareTo(val) < 0 ? this : val); BigInteger compareMin = bigNum1.min(bigNum2); //27 }
⑭equals()方法,判断两个大整数是否相等,例如c.equals(d) 相等就返回 true;
public void test() { Scanner s = new Scanner(System.in); // 读入 int n = sc.nextInt(); // 读入一个int; BigInteger m = sc.nextBigInteger(); // 读入一个BigInteger; while(sc.hasNext()){ System.out.print("sc.hasNext()=" + sc.hasNext()); } }
默认的是十进制,也就是我们平常较为常见的,例如
BigInteger d=new BigInteger("48"); System.out.println(d); //答案输出:48,这里默认的是十进制,但也支持自定义转换类型
支持自定义进制类型(已存在的),例如二进制,四进制,八进制,十六进制,如下:
public void test() { //在构造将函数时,把radix进制的字符串转化为BigInteger String str = "1011100111"; int radix = 2; // radix代表二进制,为下一行代码中的参数radix赋值 BigInteger interNum1 = new BigInteger(str,radix); //743 }
//之前是支持-1和2,但现在表明已不再输出(Not exported.) public void test() { //0 BigInteger zero = BigInteger.ZERO; //1 BigInteger one = BigInteger.ONE; //10 BigInteger ten = BigInteger.TEN; }
public void testToAnother() { BigInteger bigNum = new BigInteger("38"); int radix = 2; //1.转换为bigNum的二进制补码形式 byte[] num1 = bigNum.toByteArray(); //2.转换为bigNum的十进制字符串形式 String num2 = bigNum.toString(); //38 //3.转换为bigNum的radix进制字符串形式 String num3 = bigNum.toString(radix); //100110 //4.将bigNum转换为int int num4 = bigNum.intValue(); //5.将bigNum转换为long long num5 = bigNum.longValue(); //6.将bigNum转换为float float num6 = bigNum.floatValue(); //7.将bigNum转换为double double num7 = bigNum.doubleValue(); }
setBit(),testBit():可用于菜单的权限控制,非常好用,原理如下:
//权限控制:setBit(),testBit() @Test public void testSetAndTest() { //1.封装数据(setBit的值需 >= 0,否则出现异常:ArithmeticException("Negative bit address")) BigInteger permission = new BigInteger("0"); BigInteger numBig = permission.setBit(2); numBig = numBig.setBit(5); numBig = numBig.setBit(13); numBig = numBig.setBit(66); System.out.println("原理:" + numBig); // 原理:73786976294838214692 = 2^2+2^5+2^13+2^66 次方的和; // 看!!即使这么大的数也不会溢出,而int最大值只有2147483647; //2.取值验证(返回Boolean型) boolean flag1 = numBig.testBit(2); //true boolean flag2 = numBig.testBit(5); //true boolean flag3 = numBig.testBit(13); //true boolean flag4 = numBig.testBit(66); //true boolean flag5 = numBig.testBit(27); //false }
setBit():将set进去变量作为二进制数,计算它们的和,并以十进制显示; testBit():与setBit()相反,验证this的二进制组成元素中是否包含传入的变量;
//权限控制源码分析: //1.setBit()原理:计算this与2的n次方的和 public BigInteger setBit(int n) { if (n < 0) throw new ArithmeticException("Negative bit address"); int intNum = n >>> 5; int[] result = new int[Math.max(intLength(), intNum+2)]; for (int i=0; i < result.length; i++) result[result.length-i-1] = getInt(i); result[result.length-intNum-1] |= (1 << (n & 31)); return valueOf(result); } //2.testBit()原理:计算this的值中是否包含2的n次方 public boolean testBit(int n) { if (n < 0) throw new ArithmeticException("Negative bit address"); return (getInt(n >>> 5) & (1 << (n & 31))) != 0; }
关于“Java中BigInteger怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。