c语言sscanf函数的用法是什么
237
2022-12-09
Java 处理超大数类型之BigInteger案例详解
一、BigInteger介绍
如果在操作的时候一个整型数据已经超过了整数的最大类型长度 long 的话,则此数据就无法装入,所以,此时要使用 BigInteger 类进行操作。这些大数都会以字符串的形式传入。
BigInteger 相比 Integer 的确可以用 big 来形容。它是用于科学计算,Integer 只能容纳一个 int,所以http://,最大值也就是 2 的 31 次访减去 1,十进制为 21qnCOQo47483647。但是,如果需要计算更大的数,31 位显然是不够用的,那么,此时 BigInteger 就能满足我们的需求了。
BigInteger 能够容纳的位数那可就大了,我简单试了一下,上千位没有任何问题。除了容量大之外,BigInteger 还封装了一些常见的操作,比如 */ 的基本操作,还有绝对值,相反数,最大公约数,是否是质数等等的运算。
二、BigInteger常见函数
BigInteger(String value):构造方法,
BigInteger add(BigInteger value):加法,
BigInteger subtract(BigInteger value):减法,
BigInteger multiply(BigInteger value):乘法,
BigInteger divide(BigInteger divisor):除法,
BigInteger modInverse(BigInteger m):求模,
BigInteger pow(int exponent):乘方,
BigInteger max(BigInteger value):最大数,
BigInteger min(BigInteger value):最小数,
BigInteger abs():绝对值,
BigInteger negate():相反数,
int intValue():转化int,将BigInteger类型数据转为int。
BigInteger valueOf(long val):转为BigInteger,将long类型转为BigIntege类型
示例代码
【题目】
输入一个整数 n 1 输出一个整数 找出其所有非空子集中所有元素个数之和,然后对 10^9+7 取模,输出结果 例如输入 2,有 {1},{2},{1,2} 3 个非空子集,所有元素个数之和为 4 输出结果为 4 思路 用 int 肯定会超,需要用到 BigInteger 对于输入 n,求得所有元素之和为 n*2^(n-1) 然后再对 10^7+7 取模即可 import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String n = sc.next(); BigInteger res = http://count(new BigInteger(n)); BigInteger m = BigInteger.valueOf(10).pow(7).add(BigInteger.valueOf(7)); System.out.println(res.mod(m));; } // 计算公式 n*2^(n-1) static BigInteger count(BigInteger n) { return n.multiply(BigInteger.valueOf(2).pow(n.intValue()-1)); } }
输出一个整数
找出其所有非空子集中所有元素个数之和,然后对 10^9+7 取模,输出结果
例如输入 2,有 {1},{2},{1,2} 3 个非空子集,所有元素个数之和为 4
输出结果为 4
思路
用 int 肯定会超,需要用到 BigInteger
对于输入 n,求得所有元素之和为 n*2^(n-1)
然后再对 10^7+7 取模即可
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String n = sc.next();
BigInteger res = http://count(new BigInteger(n));
BigInteger m = BigInteger.valueOf(10).pow(7).add(BigInteger.valueOf(7));
System.out.println(res.mod(m));;
}
// 计算公式 n*2^(n-1)
static BigInteger count(BigInteger n) {
return n.multiply(BigInteger.valueOf(2).pow(n.intValue()-1));
}
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~