C++大整数类的设计与实现

1. 简介

我们知道现代的计算机大多数都是64位的,因此能处理最大整数为 2 64 − 1 2^{64}-1 2641。那如果是超过了这个数怎么办呢,那就需要我们自己手动模拟数的加减乘除了。

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+t010d0

此时余数为 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.mzph.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…