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次方