C++大整數類的設計與實現

1. 簡介

我們知道現代的計算機大多數都是64位的,因此能處理最大整數為 2 64 ? 1 2^{64}-1 264?1。那如果是超過了這個數怎么辦呢,那就需要我們自己手動模擬數的加減乘除了。

2. 思路

我們可以用一個數組來存儲大數,數組中的每一個位置表示一個數位。為了方便,我們直接用 S T L STL STL中的vector來存。

2.1 大數加法

我們需要把兩個大數的最低位對齊,然后再開始相加。唯一需要注意的是處理一下最高位置的進位置。

2.2 大數減法

大數減法跟加法不一樣的是,我們需要處理相減后的前導0,因為有可能出現相減為0的情況。處理前導0只需要從最高位開始到第2位的連續0。

2.3 大數乘法

大數乘法與加法不同的是,每次相乘后放到相應的位置而不是相乘的位次本身。

2.4 大數除法

大數除法是最難的,我們用減法進行模擬。

假設兩個大數為 a b a\ b a?b a a a為除數, b b b為被除數。

我們每次需要找到最接近被除數的除數的進制次倍數 m m m

D 0 : = { d : a × 1 0 d ≤ b } d 0 = max ? { D 0 } m 0 = a × 1 0 d 0 D_0 := \{d: a\times 10^d \le b\}\\ d_0 =\max \{D_0\}\\ m_0=a \times 10^{d_0} D0?:={d:a×10db}d0?=max{D0?}m0?=a×10d0?
通過大數減法算出 t 0 = ? b / m 0 ? t_0 =\lfloor b/m_0 \rfloor t0?=?b/m0??, 因此商需要加上 a n s = a n s + t 0 1 0 d 0 ans = ans +t_010^{d_0} ans=ans+t0?10d0?

此時余數為 b 1 b_1 b1?,如果 b 1 < a b_1<a b1?<a,說明我們的除法做完了,否則令 b = b 1 b=b_1 b=b1?, 繼續重復上面的過程直到 b k < a b_k <a bk?<a

2.5 符號問題

我們在加減乘除的時候,

可以將符號問題單獨考慮。

因此可以寫一個絕對值的大數相加,還有一個版本

的一個大的大數減一個小的大數的大數減法。

而至于乘除法的符號問題比較容易處理,因此可以

一同處理符號的問題。

3. 實現

放在gitee上了。

4. TODO

  • 更加豐富的測試樣例
  • 加減乘除未兼容普通整數
  • 大數除法中的負數的商不是最小非負余數

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70709.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70709.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70709.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2024年第十五屆藍橋杯大賽軟件賽省賽Python大學A組真題解析

文章目錄 試題A: 拼正方形(本題總分:5 分)解析答案試題B: 召喚數學精靈(本題總分:5 分)解析答案試題C: 數字詩意解析答案試題A: 拼正方形(本題總分:5 分) 【問題描述】 小藍正在玩拼圖游戲,他有7385137888721 個2 2 的方塊和10470245 個1 1 的方塊,他需要從中挑出一些…

開源RAG主流框架有哪些?如何選型?

開源RAG主流框架有哪些?如何選型? 一、開源RAG框架全景圖 (一)核心框架類型對比 類型典型工具技術特征適用場景傳統RAGLangChain, Haystack線性流程(檢索→生成)通用問答、知識庫檢索增強型RAGRAGFlow, AutoRAG支持重排序、多路召回優化高精度問答、復雜文檔處理輕量級…

Java SE與Java EE

Java SE&#xff08;Java 平臺標準版&#xff09; Java SE 是 Java 平臺的核心&#xff0c;提供了 Java 語言的基礎功能。它包含了 Java 開發工具包&#xff08;JDK&#xff09;&#xff0c;其中有 Java 編譯器&#xff08;javac&#xff09;、Java 虛擬機&#xff08;JVM&…

【Java企業生態系統的演進】從單體J2EE到云原生微服務

Java企業生態系統的演進&#xff1a;從單體J2EE到云原生微服務 目錄標題 Java企業生態系統的演進&#xff1a;從單體J2EE到云原生微服務摘要1. 引言2. 整體框架演進&#xff1a;從原始Java到Spring Cloud2.1 原始Java階段&#xff08;1995-1999&#xff09;2.2 J2EE階段&#x…

kicad中R樹的使用

在 KiCad 中&#xff0c;使用 R樹&#xff08;R-tree&#xff09;進行空間索引和加速查詢通常不在用戶層面直接操作&#xff0c;而是作為工具的一部分用于優化電路板設計的性能&#xff0c;尤其在布局、碰撞檢測、設計規則檢查&#xff08;DRC&#xff09;以及元件搜索等方面。…

org.springframework.boot不存在的其中一個解決辦法

最近做項目的時候發現問題&#xff0c;改了幾次pom.xml文件之后突然發現項目中的注解全部爆紅。 可以嘗試點擊左上角的循環小圖標&#xff0c;同步所有maven項目。 建議順便檢查一下Project Structure中的SDK和Language Level是否對應&#xff0c;否則可能報類似&#xff1a;“…

C語言實現通訊錄項目

一、通訊錄功能 實現一個可以存放100個人的信息的通訊錄&#xff08;這里采用靜態版本&#xff09;&#xff0c;每個人的信息有姓名、性別、年齡、電話、地址等。 通訊錄可以執行的操作有添加聯系人信息、刪除指定聯系人、查找指定聯系人信息、修改指定聯系人信息、顯示聯系人信…

HO3D_v3(handposeX-json 格式)數據集-release >> DataBall

注意&#xff1a; 1)為了方便使用&#xff0c;按照 handposeX json 自定義格式存儲 2)使用常見依賴庫進行調用,降低數據集使用難度。 3)部分數據集獲取請加入&#xff1a;DataBall-X數據球(free) 4)完整數據集獲取請加入&#xff1a;DataBall-X數據球(vip) HO3D 數據集官方…

Java線程池入門04

1. 提交任務的兩種方式 executorsubmit 2. executor executor位于Executor接口中 public interface Executor {void executor(Runnable command); }executor提交的是無返回值的任務 下面是一個具體的例子 package LearnThreadPool; import java.util.concurrent.ExecutorSe…

2025-02-26 學習記錄--C/C++-C語言 整數格式說明符

合抱之木&#xff0c;生于毫末&#xff1b;九層之臺&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; C語言 整數格式說明符 【例如 】&#x1f380; &#xff1a;在 C 語言中&#xff0c;%ld 是 printf 或 scanf 等格式化輸入輸出函…

【QT 一 | 信號和槽】

Qt5基本模塊 Qt Creator 中的快捷鍵 ? 注釋&#xff1a;ctrl / ? 運?&#xff1a;ctrl R ? 編譯&#xff1a;ctrl B ? 字體縮放&#xff1a;ctrl 鼠標滑輪 ? 查找&#xff1a;ctrl F ? 整行移動&#xff1a;ctrl shift ?/? ? 幫助?檔&#xff1a;F1 ? 自動…

集成學習方法之隨機森林

隨機森林是一種集成學習算法&#xff0c;它基于決策樹模型&#xff0c;通過構建多個決策樹并將它們的預測結果進行組合&#xff0c;以提高模型的準確性和穩定性。以下是隨機森林的詳細介紹&#xff1a; 原理 隨機森林通過從原始訓練數據中有放回地隨機抽樣&#xff0c;生成多…

react 中,使用antd layout布局中的sider 做sider的展開和收起功能

一 話不多說&#xff0c;先展示效果&#xff1a; 展開時&#xff1a; 收起時&#xff1a; 二、實現代碼如下 react 文件 import React, {useState} from react; import {Layout} from antd; import styles from "./index.module.less"; // 這個是樣式文件&#…

【Java 基礎】-- Java 接口中的 @Public 和 @FunctionalInterface 注解詳解

目錄 Java 接口中的 Public 和 FunctionalInterface 注解詳解 1. 概述 2. Public 注解的作用 3. Public 注解的使用 3.1 基本使用方式 3.2 應用于類和方法 4. FunctionalInterface 注解的作用 4.1 主要作用 4.2 FunctionalInterface 使用示例 4.3 允許默認方法 5. Pu…

go語言環境下載與配置(Windows)

下載 Go下載 - Go語言中文網 - Golang中文社區 建議在D盤中創建文件夾安裝到 D 盤 &#xff0c;方便進行管理&#xff0c;然后進行傻瓜式安裝。 安裝 驗證安裝 go version 安裝成功 配置環境變量 winE --> 右擊此電腦 --> 選擇屬性 --> 高級系統設置 --> 點擊…

nss刷題5(misc)

[HUBUCTF 2022 新生賽]最簡單的misc 打開后是一張圖片&#xff0c;沒有其他東西&#xff0c;分離不出來&#xff0c;看看lsb&#xff0c;紅綠藍都是0&#xff0c;看到頭是png&#xff0c;重新保存為png&#xff0c;得到一張二維碼 掃碼得到flag [羊城杯 2021]簽到題 是個動圖…

OkHttp、Retrofit、RxJava:一文講清楚

一、okHttp的同步和異步請求 Call 是 OkHttp 的核心接口&#xff0c;代表一個已準備好執行的 HTTP 請求。它支持 同步 和 異步 兩種模式&#xff1a; enqueue——>okHttp異步 OkHttpClient client new OkHttpClient();Request request new Request.Builder().url("…

Redis分布式緩存面試題

為什么使用分布式緩存&#xff1f; 1. 提升性能 降低延遲&#xff1a;將數據緩存在離應用更近的地方&#xff0c;減少數據訪問時間。減輕數據庫壓力&#xff1a;緩存頻繁訪問的數據&#xff0c;減少對后端數據庫的請求&#xff0c;提升系統響應速度。 2. 擴展性 水平擴展&a…

基于阿里云PAI平臺快速部署DeepSeek大模型實戰指南

一、DeepSeek大模型&#xff1a;企業級AI應用的新標桿 1.1 為什么選擇DeepSeek&#xff1f; 近期&#xff0c;DeepSeek系列模型憑借其接近GPT-4的性能和開源策略&#xff0c;成為全球開發者關注的焦點。在多項國際評測中&#xff0c;DeepSeek-R1模型在推理能力、多語言支持和…

C++---了解STL

上節學習了模板&#xff0c;那么就得談到C的標準模板庫STL。 C98&#xff1a;以模板方式重寫了C標準庫&#xff0c;引入了STL(標準模板庫)。 1.概念 STL(Standard template Libarary)標準模板庫&#xff1a;是C標準庫的重要組成部分&#xff0c;不僅是一個可復用的組件庫&am…