零基礎學Java(7)大數

来源:https://www.cnblogs.com/jiakecong/archive/2022/07/16/16422592.html
-Advertisement-
Play Games

大數 如果基本的整數和浮點數精度不能夠滿足需求,那麼可以使用java.math包中兩個很有用的類:BigInteger和BigDecimal。這兩個類可以處理包含任意長度數字序列的數值。BigInteger類實現任意精度的整數運算,BigDecimal實現任意精度的浮點數運算。 使用靜態的value ...


大數

如果基本的整數和浮點數精度不能夠滿足需求,那麼可以使用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ⁿ的一個大實數

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、在 數組-末尾 添加元素 - push array.push('aaa'); 添加一個 array.push('aaa', 'bbb', 'ccc'); 添加多個 2、在 數組-頭部 添加元素 - unshift array.unshift('www'); 添加一個 array.unshift( ...
  • 摘要:最近看《電腦體繫結構:量化研究方法(第五版)》,發現指令集設計中的一些原則,對API設計也同樣適用,給大家分享一下。 本文中的所有內容來自工作和學習過程中的心得整理,如需轉載請註明出處。周榮華@燧原科技 1 正交 指令集需要滿足操作、數據類型和定址方式三個方面的功能就是正交的。所以API設計 ...
  • 本章是系列文章的第十一章,主要介紹GPU的編譯原理,分析了多核運行過程中的記憶體分岔和控制流分岔的分析和處理。 本文中的所有內容來自學習DCC888的學習筆記或者自己理解的整理,如需轉載請註明出處。周榮華@燧原科技 11.1 什麼是GPU 11.1.1 GPU的發展歷史 軟體控制的VGA幀緩衝區 頻繁 ...
  • Twitter系統架構參考Push、Pull模式每時每刻都有用戶在Twitter上發表內容,Twitter工作是規劃如何組織內容並把它發送用戶的粉絲。 實時是真正的挑戰,5秒內將消息呈現給粉絲是現階段的目標。 投遞意味著內容、投入互聯網,然後儘可能快的發送接收。 投遞將歷時數據放入存儲棧,推送通知, ...
  • 環境介紹: dubbo的版本是比較舊的版本, 肯定是小於2.5的, jdk版本是1.7, 預設使用的是HotSpot虛擬機 前提說明: dubbo版本應該就是最原始的2.x的版本, 由於在這個基礎上公司還經過了自己的自定義封裝, 所以升級的話肯定是沒戲的, 其次, 也是由於某些模塊很少使用到, 所以 ...
  • 認識Ioc容器和Servlet容器 1.介紹loC容器 loC (Inversion of Control)容器,是面向對象編程中的一種設計原則,意為控制反轉(也被 稱為'控制反向”或"控制倒置”)。它將程式中創建對象的控制權交給Spring框架來管理,以便降低電腦代碼之間的耦合度。 控制反轉的實 ...
  • 數組 數組存儲相同類型值的序列。 聲明數組 數組是一種數據結構,用來存儲同一類型值的集合。通過一個整型下標(index,或稱索引)可以訪問數組中的每一個值。例如,如果a是一個整型數組,a[i]就是數組中下標為i的整數。 在聲明數組變數時,需要指出數組類型(數據元素類型緊跟[])和數組變數的名字。下麵 ...
  • 啥是倍增思想? 倍增,每次將範圍擴大或減少一倍而達到加速的效果 舉個慄子,你想要跳到15米遠的地方,你怎麼找到這個15這個地方,一步一步跳嗎,利用倍增的話 預設一個k使2^k>15值 ,這裡我們假設k=5, 2^5=32 >15 k- -; k=4; 跳過了,不跳 2^4=16 >15 k- -; ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...