零基础学Java(7)大数

零基础学Java(7)大数大数如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中两个很有用的类:BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInte

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

大数

如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中两个很有用的类:BigIntegerBigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现任意精度的整数运算,BigDecimal实现任意精度的浮点数运算。
使用静态的valueof方法可以将普通的数值转换为大数:

BigInteger a = BigInteger.valueOf(100);

对于更大的数,可以使用一个带字符串参数的构造器:

BigInteger reallyBig = new BigInteger("134443493494321591498614658741974141641519614974168416516114914196419");

另外还有一些常量:BigInteger.ZEROBigInteger.ONEBigInteger.TEN
注意:我们不能使用算术运算符(如:+和*)处理大数,而需要使用大叔类中的addmultiply方法。

BigInteger c = a.add(b); //c = a + b
BigInteger d = c.multiply(b.add(BigInteger.valueOf(2))); //d = c * (b + 2)

案例
假设你被邀请参加抽奖活动,并从500个可能的数值中抽取60个,下面程序会告诉你中彩的概率是多少

import java.math.BigInteger;
import java.util.Scanner;

/**
 * @author JKC
 * @Description:
 * @date 2022/6/29 09:42
 */
public class SixSample {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        System.out.println("你需抽多少次?");
        int k = in.nextInt();

        System.out.println("你能抽的最高数是什么?");
        int n = in.nextInt();

        BigInteger lotteryOdds = BigInteger.valueOf(1);

        for (int i = 1; i <= k; i++) {
            lotteryOdds = lotteryOdds.multiply(BigInteger.valueOf(n - i + 1).divide(BigInteger.valueOf(i)));
        }
        System.out.printf("你的概率在%d分之一", lotteryOdds);
    }
}

 

java.math.BigInteger API

BigInteger add(BigInteger other)

BigInteger subtract(BigInteger other)

BigInteger multiply(BigInteger other)

BigInteger divide(BigInteger other)

BigInteger mod(BigInteger other)
返回这个大整数和另一个大整数other的和,差,积,商以及余数

BigInteger sqrt()
得到这个BigInteger的平方根

int compareTo(BigInteger other)
如果这个大整数与另一个大整数other相等,返回0;如果这个大整数小于另一个大整数other,返回负数;否则,返回正数

static BigInteger ValueOf(long x)
返回值等于x的大整数

 

java.math.BigDecimal API

BigDecimal add(BigDecimal other)

BigDecimal subtract(BigDecimal other)

BigDecimal multiply(BigDecimal other)

BigDecimal divide(BigDecimal other)

BigDecimal divide(BigDecimal other, RoundingMode mode)
返回这个大实数与other的和,差,积。如果商是个无限循环小数,第一个divide方法会抛出一个异常。要得到一个舍入的结果,就要使用第二个方法。
RoundingMode.HALF_UP是指四舍五入方式。

int compareTo(BigDecimal other)
如果这个大实数与other相等,返回0;如果这个大实数小于other,返回附属;否则返回正数

static BigDecimal ValueOf(long x)

static BigDecimal ValueOf(long x, int n)
返回值等于x或x/10ⁿ的一个大实数
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/165330.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • FVWM使用说明_fpv怎么使用

    FVWM使用说明_fpv怎么使用[环境设定]IconFontfontname将Icon的字形。此时Icon的字形应为fontname所指定者。IconPathpath指定xbm格式用来做为Icon用的图形档的路径所在。PixmapPathpath指定xpm格式用来做为彩色的Icon用的图形档所在的路径。ColormapFocus[followsmouse][follows

    2022年10月3日
    3
  • 如何防止XSRF攻击

    如何防止XSRF攻击XSRF全称是cross-siterequestforgery(跨站点请求伪造),也称为CSRF,是一种常见的web攻击方式。攻击形式描述如下:1.用户登录并访问一个正常的站点http://www.biz.com;2.在同一个浏览器实例下,用户打开了恶意网站http://www.bad.com;(至于用户怎么会打开这个恶意网站,可能是恶意网站通过一些链接或者垃圾邮件等等形式诱…

    2022年5月19日
    59
  • vbs表白代码+整人代码,抖音vbscript表白代码

    vbs表白代码+整人代码,抖音vbscript表白代码步骤一:在电脑上新建一个txt文件步骤二:将以下代码复制过去(中文可以改)consttitle=“爱情测试”constyourname=“嫦娥”constquestion=“你最喜欢的人是谁?请在下面的方框中输入他(她)的名字。”constinfo=“你在说谎!不要逃避,实话实说。”constscend=“你说出了你的心扉,那就向他(她)表白吧。”di…

    2022年6月8日
    48
  • rcnn目标检测算法_SCL90R在线测试

    rcnn目标检测算法_SCL90R在线测试•   RCNN    RCNN(RegionswithCNNfeatures)是将CNN方法应用到目标检测问题上的一个里程碑,由年轻有为的RBG大神提出,借助CNN良好的特征提取和分类性能,通过RegionProposal方法实现目标检测问题的转化。     算法可以分为四步:     1)候选区域选择     RegionProposal是一类传统的区域提取方

    2022年10月9日
    3
  • java工具类-Java对象转换成Map

    java工具类-Java对象转换成Mappackagecom.hwqh.hwqhuser.util;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;importjava.util.HashMap;importjava.util.Map;/***Map转换工具类*/publicclass…

    2022年5月27日
    86
  • C# SplitContainer 控件详细用法

    C# SplitContainer 控件详细用法1.可以将Windows窗体SplitContainer控件看作是一个复合体,它是由一个可移动的拆分条分隔的两个面板。当鼠标指针悬停在该拆分条上时,指针将相应地改变形状以显示该拆分条是可移动的。使用SplitContainer控件,可以创建复合的用户界面(通常,在一个面板中的选择决定了在另一个面板中显示哪些对象)。这种排列对于显示和浏览信息非常有用。拥有两个面板使您可以聚合不同区域中的信息,并且用户可以轻松地使用拆分条(也称为“拆分器”)调整面板的大小。另外,还可以嵌套多个SplitC…

    2022年7月18日
    74

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号