Java大整数快速幂
来源:互联网 发布:sql server findinset 编辑:程序博客网 时间:2024/06/04 19:48
〇.简介
①BigInteger:支持任意精度的整数,可以精确地表示任意大小的整数值,同时在运算过程中不会丢失任何信息。
②BigDecimal:可以精确地表示任意精度的小数,同时在运算过程中不会丢失任何信息。
一.常用操作
valueOf(BigInteger val)//将参数转换为大整数类型abs()//求绝对值 add(BigInteger val)//加法subtract(BigInteger val)//减法(this - val)multiply(BigInteger val) //乘法divide(BigInteger val)//除法(this / val)remainder(BigInteger val)//取模mod(BigInteger val); //同上gcd(BigInteger val)//求最大公约数negate(BigInteger val); //求相反数boolean equals(BigInteger val)//比较是否相等compareTo(BigInteger val)//比较,返回值1、0、-1分别表示大于、等于、小于 pow(intexponent) //返回当前大数的exponent次幂toString()//返回此BigInteger的十进制字符串表示形式toString(intradix)//返回此BigInteger的给定基数(radix进制)的字符串表示形式BigInteger(String val)//将字符串转换为大整数型十进制表示形式BigInteger(String val,int radix)//将指定基数的字符串转换为BigInteger型
注意:不能直接用符号如+、-来使用大数字
二.基本常量
A=BigInteger.ONE //=1B=BigInteger.TEN //=10C=BigInteger.ZERO //=0
三.代码
import java.io.*;//头文件import java.math.*;import java.util.*;import java.text.*;public class Main { public static BigInteger QuickPow01 (int n)//递归版快速幂 { BigInteger ans;//定义变量 if(n == 1)//边界 return BigInteger.valueOf(2);//取值 ans = QuickPow01(n / 2);//递归 ans = ans.multiply(ans);//乘法 if(n % 2 == 1) ans = ans.multiply(BigInteger.valueOf(2)); return ans;//返回 } public static BigInteger QuickPow02 (int n)//循环版快速幂 { BigInteger ans = BigInteger.valueOf(1); BigInteger base = BigInteger.valueOf(2);//底数 while(n > 0) { if(n % 2 == 1) ans = ans.multiply(base);//ans * base n /= 2; base = base.multiply(base);//base * base } return ans; } public static void main(String[] args) { Scanner cin = new Scanner(System.in); int p;//定义变量 p = cin.nextInt();//输入p //System.out.println((int)(p * Math.log(2) / Math.log(10)) + 1);//输出2的p次方减1的位数 BigInteger num = QuickPow02(p); System.out.println(num);//输出2的p次方 } }
据笔者测试,最多能输出2800位左右,即2的9800次方
阅读全文
1 0
- Java大整数快速幂
- Sum(快速幂+大整数计算)
- 快速幂算法和大整数求模
- Java 大整数 模板
- java处理大整数
- java大整数模板
- JAVA大整数[小结]
- JAVA 大整数类
- java 之 大整数
- Java 大整数运算
- 大整数运算java
- java 大整数
- 大整数JAVA算法
- java大整数模板
- 使用快速傅里叶变换计算大整数乘法
- 使用快速傅里叶变换计算大整数乘法
- 整数快速幂
- poj1995- 整数快速幂
- hdu 2085 暴力打表
- Android OTA升级原理和流程分析(二)---update.zip差分包问题的解决
- 面向对象编程(OOP)理解
- 递归算法
- 文件的合并与拆分
- Java大整数快速幂
- lintcode:买卖股票的最佳时机 II
- java seek()方法
- mingw编译X264提示缺少yasm的解决办法
- react native Image全屏显示
- java编码注意点
- mysql中tinyint smallint int和bigint的区别
- HDU-2017 多校训练赛8-补题
- NLTK学习之三:文本分类与构建基于分类的词性标注器