D3.高精度

news2024/11/15 8:46:18

1.分类情况

A+B、A-B、A*a、A/b
A和B指的是超大超长整数,长度<=1e6;
a的值<=10000;

2.大整数的存储

int 变量肯定是存不了这么大的数的,做法是将大整数先存到string字符串,再使用字符串的访问方式,将每一位数存到数组中。

  • 因为加减涉及到数字的进位问题,要在数组最后加一个数是简单的,但是要算在数组第一个下标处进一位是麻烦的
    在这里插入图片描述

3.运算

模拟人工加法的过程,每次计算Ai+Bi+t(t是上一次的进位,0或1)

高精度加法

在这里插入图片描述

  • 模板:
vector<int> add(vector<int> &A, vector<int> &B)
{
    vector<int> C;
    int t = 0;
    for(int i = 0; i < A.size() || i < B.size(); i ++)
    {
        if(i < A.size()) t += A[i];
        if(i < B.size()) t += B[i];
        C.push_back(t % 10);
        t /= 10;
    }
    if(t) C.push_back(1);
    return C;
}
add(A,B);

注意在调用的时候和定义函数不同,直接传入就行,不用取址符号——引用

  • main函数中将字符串转化为数字
	string a;//"12345"
    cin >> a;
    for(int i = a.size()-1; i >= 0; i --)
        A.push_back(a[i] - '0');//{5,4,3,2,1}

运算时还是根据ASCII表的数值,可以看到数组的字符形式的十进制和整形数字相差了一个字符 '0'.

在这里插入图片描述

高精度减法

在这里插入图片描述

bool cmp(vector<int> &A, vector<int> &B)//判断是否有A>=B
{
    if(A.size() != B.size())  return A.size() > B.size();
    for(int i = A.size() - 1; i >= 0; i --)
        if(A[i] != B[i])
            return A[i] > B[i];
    return true;
}
vector<int> sub(vector<int> &A, vector<int> &B)
{
    vector<int> C;
    int t = 0;
    
    for(int i = 0; i < A.size(); i++)
    {
        t = A[i] - t;
        if(i < B.size()) t -= B[i];
        if(t >= 0)
        {
            C.push_back(t);
            t = 0;
        }
        else
        {
            C.push_back((t + 10) % 10);
            t = 1;
        }
    }
    
    //除去前导0
    while(C.size() > 1 && C.back() == 0)
        C.pop_back();
    return C;
}
高精度x低精度

高精度乘法的算法和人计算乘法时的过程稍有不同。Axb,A很长,使用string来储存,b很短,使用int即可。
将b看成一个整体去乘,而不是一位一位去乘。
在这里插入图片描述

vector<int> mul(vector<int> &A, int b)
{
    vector<int> C;
    int t = 0;
    for(int i = 0; i < A.size(); i ++)
    {
        t = t + A[i] * b;
        C.push_back(t % 10);
        t = t / 10;
    }
    
    //处理最后的进位
    while(t)
    {
        C.push_back(t % 10);
        t = t / 10;
    }
    
    return C;
}
//注意在main函数中考虑b=0的情况,否则输出0000而不是0
if(b)
    C = mul(A,b);
else 
    C.push_back(0);
高精度 / 低精度

在这里插入图片描述

模板

vector<int> div(vector<int> &A, int b, int &x)
{
    vector<int> C;
    int r = 0;
    for(int i = A.size() - 1; i >= 0; i --)
    {
        r = r * 10 + A[i];
        C.push_back(r / b);
        r = r % b;
    }
    x = r;
    reverse(C.begin(),C.end());
    
    while(C.size() > 1 && C.back() == 0)
        C.pop_back();
    return C;
}

注意除法是从A[]的高位开始除起,答案也是从高位开始存到C[]中。为了保证加减乘除格式的统一性,所以要在完成之后reverse(C.begin(),C.end());反转一下保证储存顺序,当然在输出的时候也是反着输出,注意会出现前导0的情况出现。

在加减乘除算法中,减法和除法会出现前导零的情况;乘法会有特殊b = 0的存在.

4.刷题

对于未知的多组数据使用while(cin >> a >> b)每次循环的时候要清空vector数组!
对于已知的多组数据使用cin >> n;while(n --),同样在必要时每次循环清空数组,重新输入!

题外
  1. 表示2的i次方:1 << i 或者 #include<cmath> pow(2,i) 而不是2 ^ i.在 C++ 中,^ 是按位异或运算符.

  2. 注意字符串使用双引号" ",char类型使用单引号' '

  3. 为了避免爆掉,有两种变量可以储存整数。 int 最多9位数;long long最多18位数。

  4. 专门用于输出字符串的函数puts(“No!”);,并且它会自动在字符串末尾添加换行符。

  5. ==运算符可以比较两个vector是否相等。

vector<int> A,C = ...
if (C == A) puts("Yes");  
else puts("No");

如果两个vector的大小相等,并且所有对应位置的元素都相等,那么这两个vector相等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1945955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++树形结构(3 树的中心、重心)

目录 一.树的中心&#xff1a; 1.树的概念&#xff1a; 2.树的性质&#xff1a; 性质1&#xff1a; 性质2&#xff1a; 3.树的中心求解&#xff1a; 4.例题&#xff1a; 二.树的重心&#xff1a; 1.基础概念&#xff1a; 2.求解方法&#xff1a; 3.例题&#xff1a;…

运筹学笔记

计算的时间问题&#xff01;计算机解决了计算量的问题&#xff01; 计算机的发展对运筹学研究起到了极大的促进作用。 运筹学的一个特征之一是它常常会考虑寻求问题模型的最佳解决方案&#xff08;称为最优解&#xff09;。 没有人能成为运筹学所有方面的专家。 分析学越来越流…

反弹shell的方式——之NC反弹shell

反弹shell是指在攻击机监听某个端口&#xff0c;然后通过目标连接攻击机监听的端口&#xff0c;在攻击机反弹得到目标机的shell。通常在目标网络有防火墙或者其他因素限制&#xff0c;导致无法持续控制目标&#xff0c;或者执行命令受阻等情况时需要进行反弹shell 常见的反弹s…

Null和 Undefined 两者区别?

1、 Undefined 和 null 的 区 别 首 先 Undefined 和 Null 都 是 基 本 数 据 类 型 &#xff0c; 这 两 个 基 本 数 据 类 型 分 别 都 只 有 一 个 值 &#xff0c; 就 是 undefined 和 null。 2、undefined 代 表 的 含 义 是 未 定 义 &#xff0c; null 代 表 的 含 义 …

Python Flask入门到精通:详细教程和实战案例

前言 Flask是一个轻量级的Web框架&#xff0c;用于快速开发Web应用程序。它的设计理念是简洁、灵活和易于扩展&#xff0c;非常适合于从简单的单页应用到复杂的大型项目。通过Flask&#xff0c;可以创建各种Web应用程序&#xff0c;比如博客、电子商务网站、RESTful API等。 …

META 备受期待的 Llama 3 405B 即将发布

本心、输入输出、结果 文章目录 META 备受期待的 Llama 3 405B 即将发布前言Llama 3 405B或许会彻底改变专用模型的数据质量Llama 3 405B将形成新的模型生态系统:从基础模型到专家组合Llama 3 405B有最高效 API 的竞争Llama 3 405B 基准测试META 备受期待的 Llama 3 405B 即将…

韦东山嵌入式linux系列-具体单板的按键驱动程序(查询方式)

1 GPIO 操作回顾 &#xff08;1&#xff09;使能模块&#xff1b; &#xff08;2&#xff09;设置引脚的模式&#xff08;工作于GPIO模式&#xff09;&#xff1b; &#xff08;3&#xff09;设置GPIO本身&#xff08;输入/输出&#xff09;&#xff1b; &#xff08;4&…

Linux_make/Makefile的理解

1.make是一个命令&#xff0c;makefile是一个文件, 依赖关系和依赖方法. a.快速使用一下 i.创建一个Makefile文件(首字母也可以小写) b.依赖关系和依赖方法 i.依赖关系: 我为什么要帮你? mybin:mytest.c ii.依赖方法: 怎么帮? gcc -o mybin mytest.c make之前要注意先创建…

UE4-构建光照后导入的静态网格体变黑

当我们将我们的静态网格体导入到项目当中的时候&#xff0c;此时我们进行重新构建光照&#xff0c;我们在从新构建完光照后&#xff0c;会发现我们的静态网格体全部变黑了&#xff0c;此时是因为没有设置光照贴图分辨率和坐标索引引起的。 将General Settings中的L…

Unite 上海 强势回归

​​​ 他回归了 Unite 大会是一年一度的 Unity 全球开发者盛会。今年&#xff0c;Unite 将于 7 月盛夏点亮上海外滩。此次盛会&#xff0c;我们将以“团结”为核心&#xff0c;凝聚全球 3000 多位 Unity 社区精英的力量&#xff0c;共同开启 Unity 技术的新纪元。 在这里&am…

【C++】透析类和对象(上)

有不懂的&#xff0c;可翻阅我之前文章哦&#xff01; 个人主页&#xff1a;CSDN_小八哥向前冲 所属专栏&#xff1a;C入门 目录 类的定义 访问限定符 类域 类的实例化 实例化概念 对象大小 this指针 类的默认成员函数 构造函数 析构函数 模拟栈&#xff08;初学者&…

(最最最全)远程服务器连接新手教程-服务器基本指令、连接服务器、安装Anaconda、配置Conda、配置环境、bashrc环境变量修改(为空怎么办)

一、服务器基本指令 ls - 列出当前目录的文件和子目录cd - 改变当前目录pwd - 显示当前目录的路径df - 查看当前内存mkdir - 创建新目录rm - 删除文件cp - 复制文件mv - 移动或重命名文件 https://blog.csdn.net/weixin_43693391/article/details/133984143?ops_request_mis…

Ubuntu20.04版本升级openssh9.8p1方法

一、问题描述&#xff1a; 8.5p1 和 9.7p1 之间的openssh版本漏洞可能会导致linux系统以root身份进行RCE&#xff0c;所以需安装最新版本 二、解决方法&#xff1a; 将当前openssh版本升级到最新的版本即openssh-9.8p1版本&#xff0c;OpenSSL大版本升级且OpenSSH有新稳定版本…

今天我们聊聊C#的并发和并行

并发和并行是现代编程中的两个重要概念&#xff0c;它们可以帮助开发人员创建高效、响应迅速、高性能的应用程序。在C#中&#xff0c;这些概念尤为重要&#xff0c;因为该语言提供了对多线程和异步编程的强大支持。本文将介绍C#中并发和并行编程的关键概念、优点&#xff0c;并…

CSS(二)——CSS 背景

CSS 背景 CSS 背景属性用于定义HTML元素的背景。 CSS 背景属性 Property描述background简写属性&#xff0c;作用是将背景属性设置在一个声明中。background-attachment背景图像是否固定或者随着页面的其余部分滚动。background-color设置元素的背景颜色。background-image把…

秋招突击——7/24——知识补充——JVM类加载机制

文章目录 引言类加载机制知识点复习类的生命周期1、加载2、连接——验证3、连接——准备4、连接——解析5、初始化 类加载器和类加载机制类加载器类加载机制——双亲委派模型 面试题整理1、类加载是什么2、类加载的过程是什么3、有哪些类加载器&#xff1f;4、双亲委派模型是什…

FineBI连接MySQL5.7

一、在FineBI系统管理中&#xff0c;点击【新建数据库连接】 选择MySQL数据库 配置数据库连接&#xff0c;如下&#xff0c;其中数据库名称就是需要连接的目标数据库

STM32工业物联网系统教程

目录 引言环境准备工业物联网系统基础代码实现&#xff1a;实现工业物联网系统 4.1 数据采集模块 4.2 数据处理与分析模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;工业监测与优化问题解决方案与优化收尾与总结 1. 引言 工业物联网&#xff08…

QCefView 在Clion+vs2022下编译

目录 QCefView 的编译Note下载代码方式一:可直接通过github下载方式二: csdn下载编译代码1. 解压文件2. 按照规定重新放置代码文件3. 将cef 的zip 放入CefViewCore中的dep文件夹内4. 使用Clion打开QCefView工程文件夹测试代码附QCefView 的编译 Note 需要使用VS2022 编译,VS…

配置linux客户端免密登录服务端linux主机的root用户

在192.168.30.129端口&#xff0c;对192.168.30.130端口进行免密登录 登录成功