Java大数与类型转换运算

软件包 java.math 的描述

提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。BigInteger 除提供任意精度之外,它类似于 Java 的基本整数类型,因此在 BigInteger 上执行的操作不产生溢出,也不会丢失精度。除标准算法操作外,BigInteger 还提供模 (modular) 算法、GCD 计算、基本 (primality) 测试、素数生成、位处理以及一些其他操作。 BigDecimal 提供适用于货币计算和类似计算的任意精度的有符号十进制数字。BigDecimal 允许用户对舍入行为进行完全控制,并允许用户选择所有八个舍入模式。

BigInteger

BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作。

构造方法

方法 功能
BigInteger(byte[] val) 将包含 BigInteger 的二进制补码表示形式的 byte 数组转换为 BigInteger。
BigInteger(String val) 将 BigInteger 的十进制字符串表示形式转换为 BigInteger。
BigInteger(String val, int radix) 指定基数的 BigInteger 的字符串表示形式转换为 BigInteger。
import java.math.*;
import java.util.Scanner;

public class bigInteger {
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        //构造方法1
        System.out.println("输入大整数");
        BigInteger b=sc.nextBigInteger();//直接读入大整数,简单易用,也可以把一个字符串当做参数,将字符串转化为大整数
        System.out.println(b);

        //2.将字符串看作十进制大整数
        System.out.println("输入10进制字符串");
        String st;
        st=sc.next();//读入字符串
        BigInteger c=new BigInteger(st);
        System.out.println(c);

        //3.将字符串看作指定基数的大整数
        System.out.println("输入2进制字符串");
        st=sc.next();
        BigInteger d=new BigInteger(st,2);
        System.out.println(d);
    }
}
//////////////
output
输入大整数
123456
123456
输入10进制字符串
123
123
输入2进制字符串
1000
8

成员方法

方法 功能
add(BigInteger val) 返回其值为 (this + val) 的 BigInteger
subtract(BigInteger val) 返回其值为 (this - val) 的 BigInteger。
multiply(BigInteger val) 返回其值为 (this * val) 的 BigInteger
divide(BigInteger val) 返回其值为 (this / val) 的 BigInteger
mod(BigInteger m) 返回其值为 (this mod m) 的 BigInteger。
negate() 返回其值是 (-this) 的 BigInteger
abs( ) 返回其值是此 BigInteger 的绝对值的 BigInteger
gcd(BigInteger val) 返回一个 BigInteger,其值是 abs(this) 和 abs(val) 的最大公约数。
pow(int exponent) 返回其值为 (thisexponent) 的 BigInteger
modPow(BigInteger exponent, BigInteger m) 返回其值为 (this mod m) 的 BigInteger。
and(BigInteger val) 返回其值为 (this & val) 的 BigInteger。
还有or、not、xor、shiftLeft、shiftRight等方法
compareTo(BigInteger val) 将此 this与val 进行比较。this < val返回-1,this==val返回0,this>val返回1
doubleValue() 将此 BigInteger 转换为 double
还有intValue、longValue、floatValue
toString() 返回此 BigInteger 的十进制字符串表示形式。
toString(int radix) 返回此 BigInteger 的给定基数的字符串表示形式。

BigInteger的进制转化

方法 功能
new BigInteger(str,radix) 只能在构造过程中将指定进制的字符串转化为大整型
this.toString(radix) 将this转换为制定进制的字符串
 public static  void main(String[] args)
    {
        BigInteger val=new BigInteger("10000000",2);//将指定进制类型的字符串转化为十进制的大整形
        System.out.println(val.toString(16));//将大整型转化为指定类型的字符串
    }
    ////
    输出
    80

BigDecimal

构造方法

BigDecimal(String val) 将 BigDecimal 的字符串表示形式转换成BigDecimal。 这是最稳妥的方法
import java.math.BigDecimal;
import java.util.Scanner;

public class Mainn {
    public static  void main(String[] args)
    {
        //构造方法
        BigDecimal val2=new BigDecimal("123.321");
        System.out.println(val2);

        //输入方法
        Scanner cin=new Scanner(System.in);
        BigDecimal val3;
        val3=cin.nextBigDecimal();
        System.out.println(val3);
    }
}
/////////
输入:123.321
输出:123.321
     123.321

舍入方式

由于Decimal是小数,因此就会遇到舍入的问题,以下是一些参数控制小数部分的舍入方式
首先介绍一个方法num.setScale(scale,RoundingMode.TYPE);这个方法的功能就是将num根据ronudingMode的方式保留scale位小数的舍入

import java.math.BigDecimal;
import java.util.Scanner;

public class Mainn {
    public static  void main(String[] args)
    {
        //输入方法
        Scanner cin=new Scanner(System.in);
        BigDecimal val=new BigDecimal("1.99999");
        System.out.println(val.setScale(3,BigDecimal.ROUND_UP));//将第四位小数即以后丢掉第三位小数加一
    }
}
///////
输出:2.000
参数名 功能 输入 输出
ROUND_UP 总是将要丢掉的数字前一位的数字加1. 5.5 6
-1.1 -2
ROUND_DOWN 将要丢掉的数字直接丢掉。 5.5 5
-1.1 -1
ROUND_CEILING 使得结果增大 5.5 6
-1.1 -1
ROUND_FLOOR 使得结果减小 5.5 5
-1.1 -2
ROUND_HALF_UP 根据被舍弃的数进行四舍五入 1.9555 1.956(scale=3)
-1.9555 -1.956(scale=3)
ROUND_HALF_DOWN 根据被舍弃的数进行五舍六入 1.9555 1.955
1.9556 1.956
ROUND_HALF_EVEN 如果被舍弃的数字是‘5’,则前一位数向上变为偶数 -1.9515 -1.952(scale=3)
1.9515 1.952(scale=3)
如果被舍弃的数字不是’5’看前一位,前一位是奇数遵循四舍五入,前一位是偶数遵循五舍六入 1.9534 1.953
1.9536 1.954
1.9543 1.954(5舍6入)
1.9547 1.955

成员方法

标度就是小数点后的位数

方法 功能
add(BigDecimal augend) 返回一个 BigDecimal,其值为 (this + augend),其标度为 max(this.scale(), augend.scale())
subtract(BigDecimal subtrahend) 返回一个 BigDecimal,其值为 (this - subtrahend),其标度为 max(this.scale(), subtrahend.scale())。
multiply(BigDecimal multiplicand) 回一个 BigDecimal,其值为 (this × multiplicand),其标度为 (this.scale() + multiplicand.scale())。
divide(BigDecimal divisor, int scale, RoundingMode roundingMode) 返回一个 BigDecimal,其值为 (this / divisor),其标度为指定标度
divide(BigDecimal divisor, RoundingMode roundingMode) 返回一个 BigDecimal,其值为 (this / divisor),其标度为 this.scale()。
divideToIntegralValue(BigDecimal divisor) 返回 BigDecimal,其值为向下舍入所得商值 (this / divisor) 的整数部分。
remainder(BigDecimal divisor) 返回其值为 (this % divisor) 的 BigDecimal
abs() 返回 BigDecimal,其值为此 BigDecimal 的绝对值,其标度为 this.scale()。
compareTo(BigDecimal val) 将this 与指定的 val 比较。this>val返回1this==val返回0 、this
doubleValue() 各种Value…
movePointLeft(int n) 返回一个 BigDecimal,它等效于将该值的小数点向左移动 n 位
movePointRight(int n) 返回一个 BigDecimal,它等效于将该值的小数点向右移动 n 位。
pow(int n) 返回其值为 (thisn) 的 BigDecimal,准确计算该幂,使其具有无限精度
precision() 返回此 BigDecimal 的精度(有效数字个数)
scale() 返回此 BigDecimal 的标度(小数位数)
toBigInteger() 将此 BigDecimal 转换为 BigInteger
toString() 返回此 BigDecimal 的字符串表示形式,如果需要指数,则使用科学记数法。

Java进制转化

最好用的将十进制整型数据转化为任意进制字符串

Inter.toString(val,radix);
Long.toString(val,radix);
要求radix<35
this.toString(radix),将this所指的BigInteger对象转换为制定进制的字符串
public static  void main(String[] args)
    {
        long a=8;
        System.out.println(Long.toString(a,2));
    }
    ////////
    输出:
    1000

十进制数据val转化为2,8,16进制字符串。

数据类型 方法 目的进制
int Integer.toBinaryString(val) 二进制
Integer.toOctalString(val) 八进制
Integer.toHexString(val) 十六进制
Long Long.toBinaryString(val) 二进制
Long.toOctalString(val) 八进制
Long.toHexString(val) 十六进制

注意:Java中的long型数据对应于long long。long型常数要加后缀L例如:long val=1000000000000L;如果数值不超过int范围不用加L

public static  void main(String[] args)
    {
        Scanner cin=new Scanner(new BufferedInputStream(System.in));
        Integer a=1024;
        System.out.println(Integer.toBinaryString(a));//将a转化为2进制字符串
        System.out.println(Integer.toOctalString(a));//转化为8进制
       System.out.println(Integer.toHexString(a));//转化为16进制
    }
    //////////
    输出:
    10000000000
    2000
    400

将制定进制的字符串转化为十进制

方法 功能
Integer.parseInt(str,radix) radix指定str的进制,然后转化为int型数据,省略radix默认十进制
Double.parseDouble(str,radix) radix指定str的进制,然后转化为double型数据,省略radix默认十进制
Long.parseLong(str,radix) radix指定str的进制,然后转化为Long型数据,省略radix默认十进制
public static  void main(String[] args)
    {
        String str="10000000";
        //int a=Integer.parseInt(str);
        System.out.println(Integer.parseInt(str));//将字符串看作10禁止
        System.out.println(Integer.parseInt(str,8));//将字符串看作8进制
        System.out.println(Long.parseLong(str,16));//将字符串看作16进制
    }
    //////
    输出:
    10000000
    2097152
    268435456

你可能感兴趣的:(java基础,acm应用)