当前位置: 首页 > news >正文

高精度减法

当在减法计算中,有时候数很大,当超出long long 的范围的时候,我们需要利用高精度算法来计算。

此时我们不在利用int/long long 来存储数据,而是用string来存储数据。用字符串存储两个很大的整数,在用数组存储数据之前,需要进行判断,减数和被减数谁更大,谁大把谁当成被减数(如果被减数<减数,最后在前面加一个负号即可),之和再开辟两个数组,把两个字符串里面存储的数字逆序存储在int数组中,(保证两个数字的低位对齐,方便计算),之和再遍历长度最长的那个数据,让两个数组对应下标的值相减,这个时候会产生借位问题,(以十进制为例)当被减数该下标的值小于减数该下标的值,就让该下标+1对应的值减一,该下标的值+10,之后再喝减数该下标的值相减(其他进制(n进制)只需要把10换成n即可(16进制除外,需要转换字母));

在输出的时候,要注意可能会有前导0(就是比如222和221,按以上方法会输出001,我们需要删除前面的两个0),删除前导0之后在进行输出(注意如果前面被除数和除数进行了交换,需要加负号),具体代码/注释如下

#include<bits/stdc++.h> using namespace std; int main() { //用数组模拟高精度 //整型数组 //反转存储:低位对齐 //高精度算法只能输入字符串 string s1, s2; cin >> s1 >> s2; int flag = 1; //标记(判断什么时候两个数交换) //当第二个数大于第一个数的时候,两数交换,(让大数减小数) //不能直接s2>s1因为当两个字符串的长度不一样的时候,且第一个字符串的前几个字符比s2大的时候,就无法正确比较 if ((s2>s1&&s1.size()==s2.size())||s2.size()>s1.size()) { string s3; s3 = s2; s2 = s1; s1 = s3; flag = 0; } int lmax = max(s1.size(), s2.size()); vector<int> vec3(lmax + 2); vector<int> vec1(lmax+2); vector<int> vec2(lmax+2); //给两数组赋值 for (int i = 0; i < s1.size();i++) { vec1[s1.size() - i] = s1[i]-'0'; //赋值为和字符‘0’的差值,不可以使用stoi,因为这是字符转数字 } for (int i = 0; i < s2.size(); i++) { vec2[s2.size() - i] = s2[i]-'0'; } for (int i = 1; i <= lmax;i++) { if (vec1[i]<vec2[i]) { //当被减数当位数字小于减数当位数字,就需要借位 vec1[i + 1]--; //借位 vec1[i] += 10; //(n进制把10换成n) } vec3[i] = vec1[i] - vec2[i]; } while (vec3[lmax]==0&&lmax>1) { //因为数组从下标1开始存的数,所以lmax得大于1 lmax--; //删除高位的0 } if (!flag) { //如果满足上面交换就需要加负号 cout << "-"; } for (int i = lmax; i >= 1;i--) { cout << vec3[i]; } }
http://www.jsqmd.com/news/314114/

相关文章:

  • 推荐系统为啥都长一个样?聊聊「离线训练 + 在线召回 + 排序」这套大数据架构
  • Claude Code子代理实战:10个即用模板分享
  • 老板必须懂的财税常识
  • 2_6_五段式SVPWM(经典算法+DPWM2)算法理论与MATLAB实现详解
  • 2009-2022年中国审计年鉴面板数据
  • 2020-2025年国考岗位成绩汇总表
  • 供应 日置 HIOKI 3275 AC/DC钳式电流探头 带箱子
  • 力科 CP030A 30A, 50MHz,1mA/div 电流探头
  • 基于SpringBoot+Vue的养老院管理系统(源码+lw+部署文档+讲解等)
  • 基于SpringBoot+Vue+web的智能家教服务平台设计与实现(源码+lw+部署文档+讲解等)
  • 【绩效域】核心考点汇总
  • Keysight 85033E 是德科技85033E网络校准件
  • AI Agent革命:大模型不再是聊天玩具,而是真正的数字劳动力,小白程序员必看!
  • 构建“Git 提交 AI 神器”:从零打通 DeepSeek 混合架构全栈开发
  • 程序员必看!RAG技术揭秘:让你的AI应用知识渊博,不再一本正经地胡说八道!
  • “把事办成“而非“只会聊天“:智能分析Agent如何让大模型真正落地企业场景,小白程序员也能秒变大神!
  • day 15| 10.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 222.完全二叉树的节点个数
  • 程序员瑟瑟发抖!AI Agent全面接管编程:从“代码写出来“到“代码流出来“,不会用AI的即将被淘汰!
  • ARM汇编语言语法小解
  • 使用 Docker 部署 Clawdbot(官方推荐方式)
  • 宏智树 AI:ChatGPT 学术版驱动,重构学术写作智能新范式
  • 宏智树 AI:AI5.0 驱动的全流程学术创作智能解决方案平台
  • 拒稿率暴跌!宏智树 AI 解锁期刊论文写作新逻辑:不是凑字数,是精准对话编辑部
  • 深度学习篇---CBAM通俗易懂解析
  • 【2026】 LLM 大模型系统学习指南 (27)
  • Power BI + Dify 本地部署:用大模型赋能报表智能分析(保姆级教程)
  • Tyr-[Hu-rasT24]-Lys ;Tyr-Gly-Ala-Val-Gly-Val-Gly-Lys-Ser-Lys
  • Transforming Growth Factor α (human) (TGF α (1-50) (human))
  • 进程级沙箱隔离与WebGL指纹抗识别:指纹浏览器核心技术难点与工程落地
  • 如果生产环境Redis实例CPU使用率很高,比如达到90%以上,请问可能产生的原因有哪些? 如何解决?