高精度四则运算专题

news2024/10/2 12:31:10

高精度X高精度加法、减法、乘法

高精度X普通精度 乘法

高精度X普通精度 除法


目录

高精度X高精度 加法

题目

要点

代码

高精度X高精度 减法

题目

要点

代码

高精度X普通精度 乘法

题目

要点

代码

高精度X高精度 乘法

要点

代码

高精度X普通精度 除法

题目

要点

代码


高精度X高精度 加法

题目

要点

  • t 存储之前的部分位乘积和
    • 每次取个位数进入 c
    • 然后抛弃个位数
  • 存在 t 没在 a 数位次数内处理完的情况,要补充处理
  • 加法是唯一一个不需要处理前导零的
  • 加法是唯二需要进一步处理 t 的

代码

#include <bits/stdc++.h>
using namespace std;
vector<int> a, b;
string sa, sb;
vector<int> add(vector<int>& a, vector<int>& b)
{
    if(a.size() < b.size()) return add(b, a);
    
    vector<int> c;
    int t = 0;
    for(int i = 0; i < a.size(); i++)
    {
        t += a[i];
        if(i < b.size()) t += b[i];
        c.push_back(t % 10);
        t /= 10;
    }
    
    while(t)
    {
        c.push_back(t % 10);
        t /= 10;
    }
    
    return c;
}
int main()
{
    cin >> sa >> sb;
    for(int i = sa.size()-1; i >= 0; i--)
        a.push_back(sa[i] - '0');
    for(int i = sb.size()-1; i >= 0; i--)
        b.push_back(sb[i] - '0');
        
    a = add(a, b);
    
    for(int i = a.size()-1; i >= 0; i--)
        cout << a[i];
    
    return 0;
}

高精度X高精度 减法

题目

要点

  • 注意要编写 cmp函数 使得 被减数大于减数
  • 定义 t 计算开始表示之前的借位影响,中间表示不借位结果,最后表示当前借位对之后的影响
    • t < 0证明借位
    • (t+10)%10,自动借位,取最终结果
  • 需要处理前导零

代码

#include <bits/stdc++.h>
using namespace std;
string sa, sb;
vector<int> a, b;
bool cmp()
{
    if(a.size() != b.size()) return a.size() > b.size();
    return sa >= sb; //注意这里必须取等,不然0就变成-0了
}
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];
        if(i < b.size()) t -= b[i];
        c.push_back((t+10) % 10);
        if(t < 0) t = -1;
        else t = 0;
    }
    
    while(c.size() > 1 && c.back() == 0) c.pop_back();
    
    return c;
}
int main()
{
    cin >> sa >> sb;
    for(int i = sa.size()-1; i >= 0; i--)
        a.push_back(sa[i] - '0');
    for(int i = sb.size()-1; i >= 0; i--)
        b.push_back(sb[i] - '0');
        
    if(cmp())
    {
        auto c = sub(a, b);
        for(int i = c.size()-1; i >= 0; i--)
            cout << c[i];
    }
    else
    {
        auto c = sub(b, a);
        cout << '-';
        for(int i = c.size()-1; i >= 0; i--)
            cout << c[i];
    }
    
    return 0;
}

高精度X普通精度 乘法

题目

要点

  • 需要处理前导零
  • 乘法是唯二需要进一步处理 t 的

代码

#include <bits/stdc++.h>
using namespace std;
vector<int> a;
int b;
string sa;
vector<int> mul(vector<int>& a, int b)
{
    vector<int> c;
    int t = 0;
    for(int i = 0; i < a.size(); i++)
    {
        t += a[i] * b;
        c.push_back(t % 10);;
        t /= 10;
    }
    
    while(t)
    {
        c.push_back(t % 10);;
        t /= 10;
    }
    
    while(c.size() > 1 && c.back() == 0) c.pop_back();
    
    return c;
}
int main()
{
    cin >> sa >> b;
    for(int i = sa.size()-1; i >= 0; i--)
        a.push_back(sa[i] - '0');
        
    auto c = mul(a, b);
    for(int i = c.size()-1; i >= 0; i--)
        cout << c[i];
        
    return 0;
}

高精度X高精度 乘法

要点

  • 提前开 c,存储 a b各位相乘的结果,根据下标之和顺序放置;开得足够大同时可以免处理 t
  • 计算是 c 的内部计算,思想不变
  • 需要处理前导零

代码

#include <bits/stdc++.h>
using namespace std;
vector<int> a, b;
string sa, sb;
vector<int> mul(vector<int>& a, vector<int>& b)
{
    vector<int> c(a.size() + b.size(), 0); //多开不要紧,后面有前导零处理
    
    for(int i = 0; i < a.size(); i++)
        for(int j = 0; j < b.size(); j++)
            c[i+j] += a[i] * b[j];
            
    int t = 0;
    for(int i = 0; i < c.size(); i++) //不用进一步处理t,因为 c 的大小足够大
    {
        t += c[i];
        c[i] = t % 10;
        t /= 10;
    }
    
    while(c.size() > 1 && c.back() == 0) c.pop_back();
    
    return c;
}
int main()
{
    cin >> sa >> sb;
    for(int i = sa.size()-1; i >= 0; i--)
        a.push_back(sa[i] - '0');
    for(int i = sb.size()-1; i >= 0; i--)
        b.push_back(sb[i] - '0');
        
    auto c = mul(a, b);
    for(int i = c.size()-1; i >= 0; i--)
        cout << c[i];
        
    return 0;
}

高精度X普通精度 除法

题目

要点

  • 存储统一,还是从低位到高位
  • 定义 r 表示 上一位计算的余数,参与计算时需要 * 10
  • 但是计算是从高位到低位,所以 c 也是从高位到低位,所以需要 reverse
  • 需要除去前导零

代码

#include <bits/stdc++.h>
using namespace std;
string sa;
vector<int> a;
int b;
vector<int> div(vector<int>& a, int b, int& r)
{
    vector<int> c;
    for(int i = a.size()-1; i >= 0; i--)
    {
        r = r * 10 + a[i];
        c.push_back(r / b);
        r %= b;
    }
    
    reverse(c.begin(), c.end());
    
    while(c.size() > 1 && c.back() == 0) c.pop_back();
    
    return c;
}
int main()
{
    cin >> sa >> b;
    for(int i = sa.size()-1; i >= 0; i--)
        a.push_back(sa[i] - '0');
    
    int r = 0;
    auto c = div(a, b, r);
    
    for(int i = c.size()-1; i >= 0; i--)
        cout << c[i];
    cout << '\n' << r;
    
    return 0;
}

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

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

相关文章

GESP C++四级样题卷

&#xff08;满分&#xff1a;100 分 考试时间&#xff1a;90 分钟&#xff09; PDF试卷及答案回复:GESPC20234 一、单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 1.在 C中&#xff0c;指针变量的大小&#xff08;单位&#xff1a;字节&#xff09;是&#…

计算机网络-系分(5)

目录 计算机网络 DNS解析 DHCP动态主机配置协议 网络规划与设计 层次化网络设计 网络冗余设计 综合布线系统 1. 双栈技术 2. 隧道技术 3. 协议转换技术 其他网络技术 DAS&#xff08;Direct Attached Storage&#xff0c;直连存储&#xff09; NAS&#xff08;Net…

《Windows PE》3.2.4节表

节表由多个节表项&#xff08;IMAGE_SECTION_ HEADER&#xff09;组成&#xff0c;每个节表项&#xff08;40个字节&#xff09;记录了 PE中与某个特定的节有关的信息&#xff0c;如节的属性、节 的大小、在文件和内存中的起始位置等。节表中节的数量由字段IMAGE_FILE_HEADER. …

vulnhub-Matrix 1靶机

vulnhub&#xff1a;https://www.vulnhub.com/entry/matrix-1,259/ 导入靶机&#xff0c;扫描IP 靶机在192.168.81.6&#xff0c;扫描端口 存在三个端口&#xff0c;有两个都是http服务&#xff0c;访问 80端口的网页没什么信息&#xff0c;31337的网页元素里有注释 ZWNobyAi…

Raft 协议解读:简化分布式一致性

文章目录 1. 分布式系统与一致性问题1.1 什么是分布式系统1.2 一致性在分布式系统中的重要性1.3 分布式一致性挑战1.4 现有一致性协议1.5 Raft 的设计目标 2. Raft 协议的背景与介绍2.1 Raft 协议的诞生背景2.2 什么是 Raft2.3 Raft 解决的一致性问题2.4 Raft 的设计原则2.5 Pa…

Oracle 数据库安装及配置

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

PCL MLS上采样(基于法向量)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 可视化原始点云和上采样后的点云 2.1.2 MLS 上采样 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff0…

Redis-预热雪崩击穿穿透

预热雪崩穿透击穿 缓存预热 缓存雪崩 有这两种原因 redis key 永不过期or过期时间错开redis 缓存集群实现高可用 主从哨兵Redis Cluster开启redis持久化aof&#xff0c;rdb&#xff0c;尽快恢复集群 多缓存结合预防雪崩&#xff1a;本地缓存 ehcache redis 缓存服务降级&…

iPhone/iPad技巧:如何解锁锁定的 iPhone 或 iPad

“在我更新 iPhone 上的软件后&#xff0c;最近我遇到了iPhone 被锁定到所有者的消息&#xff0c;该如何解决&#xff1f;” 根据我们的研究&#xff0c;许多用户在 iOS 18 更新或恢复出厂设置后都会遇到同样的问题。只要出现问题&#xff0c;您就无法使用 iPhone 或 第 1 部分…

jenkins微服务

如果vim进去某个文件里&#xff0c;可以按键盘的向下键查阅其它部分 记得每天备份虚拟机的项目 一.在linux安装jenkins 1.上传文件 我们采用安装包的方式安装。 先用SShclient在/usr/local/下创建jenkins文件夹&#xff0c;然后向其中导入两个包 2.安装jenkins 再在控制…

「STL::queue」标准库适配器:priority_queue(优先队列)介绍|自定义比较运算(C++)

目录 概述 创建销毁 内部理解 构造析构 自定义比较 赋值重构 数据访问 内存管理 数据控制 Tips 概述 priority_queue 是一种C标准模板库STL中定义的一种序列容器&#xff0c;它允许你在运行时动态地进行堆操作。 priority_queue 可以自动管理内存&#xff0c;这意味…

使用阿里云试用资源快速部署web应用-dofaker为例

本文介绍使用阿里云的试用资源部署dofaker的方法&#xff0c;本教程主要作学习在阿里云部署web应用之用&#xff0c;部署好应用之后&#xff0c;可以在任何地点通过公网ip访问web应用。 一、创建云主机 登录阿里云账户之后&#xff0c;点击控制台&#xff1a; 点击云服务器EC…

基于SSM的大学生心理素质测评及咨询平台系统设计与实现(源码+定制+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

vscode中配置python虚拟环境

python虚拟环境作用 Python虚拟环境允许你为每个独立的项目创建一个隔离的环境&#xff0c;这样每个项目都可以拥有自己的一套Python安装包和依赖&#xff0c;不会互相影响。实际使用中&#xff0c;可以在vscode或pycharm中使用虚拟环境。 1.创建虚拟环境的方法&#xff1a; …

天呐!关于PyCharm你竟然一无所知?

PyCharm 是一种专为 Python 开发而设计的集成开发环境&#xff08;IDE&#xff09;&#xff0c;由 JetBrains 开发。 以下是 PyCharm 的一些主要特点和常见的使用方法&#xff1a; 特点&#xff1a; 智能代码编辑&#xff1a;具有智能代码补全、语法检查、代码重构等功能&…

HISTCITE分析进阶

不可否认histcite是一个很好的文献分析的工具,他能很好的找到最重要的那几篇文章,同时也能找到研究的发文趋势、研究机构和著名的研究学者等。但是它是一个很老的软件,因而很多东西都没能跟上下载的分析。我在使用过程中,尝试做一些改变使其更好用,同时也做一些记录。 1.…

ROS学习笔记(三):VSCode集成开发环境快速安装,以及常用扩展插件配置

文章目录 前言VSCode集成开发环境1 安装VSCode2 VSCode扩展插件2.1 VSCode扩展插件模块介绍2.1 常用扩展插件配置一、语言支持类插件二、智能辅助类插件三、科学计算与数据分析类插件四、ROS开发相关插件 3 总结相关链接 前言 关于Ubuntu与ROS的常规安装&#xff0c;可以看这几…

数字经济与新质生产力:地理信息与遥感视角下的深度分析

在数字化浪潮的推动下&#xff0c;我们正见证着生产力的一次历史性飞跃。数字经济如何重塑生产力的三大要素&#xff1a;劳动对象、劳动资料和劳动者&#xff1f;让我们来深度分析数字经济如何推动新质生产力的发展。 一、数字经济与地理信息的融合 地理信息与遥感技术是数字…

如何在 Windows 10 上恢复未保存/删除的 Word 文档

您是否整夜都在处理重要的 word 文件&#xff0c;但忘记保存它&#xff1f;这篇文章是给你的。在这里&#xff0c;我们将解释如何恢复未保存的 word 文档。除此之外&#xff0c;您还将学习如何恢复已删除的 word 文档。 从专业人士到高中生&#xff0c;每个人都了解丢失重要 W…

【Android 14源码分析】WMS-窗口显示-流程概览与应用端流程分析

忽然有一天&#xff0c;我想要做一件事&#xff1a;去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…