基础算法:高精度减法

2023-10-28

/*
    高精度减法
    两个长正整数的减法
    减数 - 被减数 = 差
    
    如果不是两个长正整数,要考虑给出的数本身有负号的情况,用一个位置来专门保存负号'-'
*/

#include <iostream>
#include <vector>

using namespace std;

//判断是否 A >= B
bool IsBigger(vector<int> &A, vector<int> &B)
{
    //A,B长度不等时,长度长的数大
    if(A.size() != B.size()) return A.size() > B.size();
    
    //A,B长度相等,从数的最高位开始比较
    for(int i = A.size() - 1; i >= 0; i--)
    {
        if(A[i] != B[i])
            return A[i] > B[i];
    }
    
    //两数相等也是true
    return true;
    
}

//C = A - B
//进入函数时,已经是A >= B
vector<int> sub(vector<int> &A, vector<int> &B)
{
    vector<int> C;
    
    //从低位开始减
    //t:借位标记
    for(int i = 0, t = 0; i < A.size(); i ++)
    {
        t = A[i] - t;
        if(i < B.size())  t -= B[i];//先判断,防止数组越界
        
        //分两种情况
        //1.此时t >= 0,t
        //2.此时t < 0,t + 10
        //两种情况综合为(t + 10) % 10
        C.push_back((t + 10) % 10);
        
        if( t < 0) t = 1;//有借位
        else t = 0;
    }
    
    //如果最后结果有前导0,要去除
    while(C.size() > 1 && C.back() == 0) C.pop_back();
    
    return C;
}


int main()
{
    string a, b;
    cin >> a >> b;
    
    vector<int> A, B;
    
    for(int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0');
    for(int i = b.size() - 1; i >= 0; i--) B.push_back(b[i] - '0');
    
    //判断a,b两数的大小
    if(IsBigger(A, B)) {
        //A >= B
        auto C = sub(A, B);
        for(int i = C.size() - 1; i >= 0; i--) printf("%d", C[i]);
        
    } else {
        auto C = sub(B, A);//先绝对值相减,最后加负号
        printf("-");
        for(int i = C.size() - 1; i >= 0; i--) printf("%d", C[i]);
    }
    
    return 0;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基础算法:高精度减法 的相关文章

  • 检测到 NuGet 包的版本冲突

    我正在开发 ASP Net core 2 1 Web 应用程序项目 我的解决方案中有 1 个项目和 3 个其他库 它是高级架构 数据访问层 DAL 业务层 BL 公共层 CL 所以我需要添加引用来连接一些库和项目 我已经添加了CL参考我的项
  • GCC C++ (ARM) 和指向结构体字段的 const 指针

    假设有一个简单的测试代码 typedef struct int first int second int third type t define ADDRESS 0x12345678 define REGISTER type t ADDRE
  • 将处理后的图形绘制到另一个图形中

    我想将一个经过处理的图形绘制到另一个图形中 I have two graphics var gHead Graphics FromImage h var gBackground Graphics FromImage b Transform
  • 如何进行带有偏差的浮点舍入(始终向上或向下舍入)?

    我想以偏置舍入浮动 要么总是向下 要么总是向上 代码中有一个特定的点 我需要这个 程序的其余部分应该像往常一样四舍五入到最接近的值 例如 我想四舍五入到最接近的 1 10 倍数 最接近 7 10 的浮点数约为 0 69999998807 但
  • 如果.Net Core可以在Windows上运行,为什么不能在.Net Framework中引用.Net Core DLL?

    我明白为什么 Net Framework 可能会在 Net Core IE 中导致问题 因为不存在特定于 Windows 平台的 API 但是为什么不能直接引用 Net Core 作为 Net Framework 中的库呢 如果 Net C
  • 获取两个字符串之间的公共部分c# [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要的是获取两个单词之间的共同部分并获取差异 例子 场景1 word1 感言 word2 Test 将返回 公共部分Test 不同之
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • 如何在 VS 中键入时显示方法的完整文档?

    标题非常具有描述性 是否有任何扩展可以让我看到我正在输入的方法的完整文档 我想查看文档 因为我可以在对象浏览器中看到它 其中包含参数的描述和所有内容 而不仅仅是一些 摘要 当然可以选择查看所有覆盖 它可能是智能感知的一部分 或者我不知道它并
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它

随机推荐

  • 22.1 Numpy 去重

    Numpy 去重 np unique 参数1 a 数组 参数2 return index True False 新列表元素在旧列表中的位置 参数3 retun inverse True False 旧列表元素在新列表中的位置 参数4 ret
  • Vue3 实现Event-Bus事件总线 (mitt插件)

    文章目录 一 参考 二 问题描述 三 开发案例 typescript 解析 instance proxy Bus出错 一 参考 vue3 eventBus npm mitt 二 问题描述 Vue3 没有像Vue2那样创建一个Vue实例作为事
  • centos 7 开启80,443端口

    一 查看系统防火墙状态 如果返回 running 代表防火墙启动正常 1 firewall cmd state 二 开启端口外网访问 1 添加端口 返回 success 代表成功 permanent永久生效 没有此参数重启后失效 1 fir
  • QProcess中的调用外部exe结束之后的finished信号及常用信号

    1 可以参考相关的链接 https doc qt io Qt 5 qprocess html finished 2 注意使用的时候启动以下4个信号 使用的是start 否则启动就有问题 这边注意一下start 和startDetached
  • 【总结】Apk反编译全解

    实践总结 解决问题 乐在分享 古月大仙荣誉出品 欢迎关注 加粉 点赞 评论 交流 1 内容摘要 Apk保险措施 混淆 加固 NDK 敏感操作的字符串替代 检查签名 高手成长路径 脱壳 反编译 jadx dex jar和apktool xml
  • 安装WSL过程

    1 准备 必须使用windows10 2004版本和更高的版本 19041或者更高 或者windows11 win R 输入winver查询当前windows版本 2 安装 现在可以通过在命令行 管理员权限 输入wsl install 来安
  • Pikachu-暴力破解验证码绕过

    目录 一 验证码绕过 on client 1 验证码的认证流程 2 不安全验证码 on client常见问题 3 实验过程 二 验证码绕过 on server 1 不安全验证码 on server常见问题 2 实验过程 一 验证码绕过 on
  • MySQL存储过程

    文章目录 简介 优点 缺点 编写第一个MySQL存储过程 调用存储过程要调用存储过程 可以使用以下SQL命令 MySQL存储过程的变量 声明变量 分配变量值 变量范围 作用域 删除存储过程 存储过程的参数 MySQL存储过程参数示例 1 I
  • 【开发工具】使用VMware安装Ubuntu系统

    目录 一 下载Ubuntu镜像 二 下载VMware虚拟机系统 三 新建虚拟机 四 安装Ubuntu系统 一 下载Ubuntu镜像 下载地址 版本 Ubuntu 22 04 LTS https cn ubuntu com download
  • "通配符"和"正则表达式"的区别

    通配符是系统level的 而正则表达式需要相关工具的支持 egrep awk vi perl 在文本过滤工具里 都是用正则表达式 比如像awk sed等 是针对文件的内容的 通配符多用在文件名上 比如查找find ls cp 等等 1 通配
  • ipad连接电脑_一个从windows传文件到ipad的方法

    动机 写这篇文章的起因是想用ipad看存在windows上的视频 于是就琢磨了下windows系统传文件到ipad的方法 一个比较好的办法是用iCloud传 但是条件受限 一方面 iCloud只有5G的存储空间 另一方面 家里没网 只能靠4
  • 技术溢出

    1 企业和国家都是一个虚拟的主题 是由人们的想象构成 2 国家只是在体量 多样性上高于企业而已 3 管理企业和管理国家理论上没有区别 只是使命感不同 企业是为了盈利而产生的 政党是为了人民而服务的 后来有的企业开始服务于人民 有的政党开始逐
  • Linux必学知识(超全)

    Linux 一 Linux 的介绍 二 CentOS 安装技术难点 网络配置三种方式理解 2 1虚拟机的三种网络配置方式的说明 2 2 Centos 终端的使用和联网 2 2 1在 centos 的 ff 可以联网 可以和外部的 ip 联通
  • 【尚硅谷-Java学习】回形数

    回形数 题目描述 输入整数n 生成n n的二维数组 元素按照顺时针顺序从1递增 例如输入3 得到 1 2 3 8 9 4 7 6 5 思路 定义四个变量up down left right 分别表示数组的最上面 最下面 最左 最右的索引 从
  • 第十四届蓝桥杯(第二期)模拟赛试题与题解 C++

    第十四届蓝桥杯 第二期 模拟赛试题与题解 C 试题A 题解 位运算 试题B 题解 闰年判断 试题C 题解 枚举判断 试题D 题解 动态规划 问题E 题解 记忆化搜索 试题F 题解 计算 试题G 题解 哈希集合 试题H 题解 后缀回文 试题I
  • 增加肌肉记忆,码一遍 龙哥的pytorch示例: ex_001, matMul;ex_002, autograd;ex_003, 线性函数的 gradient descent <梯度下降最简示例>

    import torch import time print torch version print torch cuda is available a torch randn 1024 8 16 1000 b torch randn 10
  • Java类型转换工具类(十六进制—bytes互转、十进制—十六进制互转,String—Double互转)...

    数据类型转换工具类 author cyf public class NumConvertUtil bytes 转16进制字符串 param bArray return public static final String bytesToHe
  • ubuntu下安装QT与环境变量的添加

    1 4 Qt在Linux下安装 Qt在Linux系统里的安装要稍微复杂一些 因为Linux发行版众多 所以安装过程有些差异 由于Linux系统都可以自行安装 GNU 工具集 对应Windows系统里的MinGW 所以Qt在Linux系统里的
  • git推送新项目

    在命令窗口中输入 git init 在 Gitee 中 我们刚刚新建的仓库里 去复制仓库的地址 在命令窗口中输入 git remote add origin 你的仓库地址 在命令窗口中输入 git pull origin master 在命
  • 基础算法:高精度减法

    高精度减法 两个长正整数的减法 减数 被减数 差 如果不是两个长正整数 要考虑给出的数本身有负号的情况 用一个位置来专门保存负号 include