前言

在C++中,数据范围超过long long 的范围时,就要考虑到高精度,下面为运用容器实现的高精度加减法。(刚学,可能存在瑕疵)

基本步骤

对于输入的数据可以用string接收。然后遍历要运算的数据存入容器vector< int >中。
一. 加法

  • 设置一个int = temp变量存放将两个数据逐位相加的值,并加上进位,temp %10 则为结果在该位上的值,temp / 10则是下一位的进位(0或1)。
  • 每一位都相加到最后。
  • 加完后再判断一下是否有进位。
    二. 减法
  • 首先判断两个数的大小。先比较长度,长度一样则逐位比较。
  • 设置一个int = temp变量先存放减数和减去借位,如果被减数该位存在再用temp减去。(temp+10) %10 则为结果在该位上的值。
  • 判断temp是否小于0,得出下一位的进位(0或1)。

代码实现

//高精度加法 AcWing791题
#include <iostream>
#include <vector>
using namespace std;vector<int> add(vector<int> a,vector<int> b){//如果a的长度小于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 = t / 10;}//判断最后一位是否有进位if(t > 0) c.push_back(t);return c;
}
int main(){string a, b;cin >> a >> b ;vector<int> aa;vector<int> bb;for(int i = a.size()-1; i >= 0; i -- ) aa.push_back(a[i] - '0');for(int i = b.size()-1; i >= 0; i -- ) bb.push_back(b[i] - '0');auto C = add(aa,bb);for(int i = C.size()-1; i >= 0; i -- ) cout<<C[i];return 0;
}
//高精度减法,AcWing第792题
#include <iostream>
#include <vector>
using namespace std;//比较两个数大小
bool com(vector<int> a,vector<int> b){//长度不一样直接比位数if(a.size() != b.size()) return a.size() > b.size();//长度不一样从高位开始逐位比较else{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){//如果a小于b就交换顺序if(!com(a,b)) return sub(b,a);vector<int> c;int t = 0;  // 是否借位for(int i = 0; i < a.size(); i ++){t = a[i] - t;if(i < b.size()) t = t - b[i];c.push_back((t + 10) % 10);//判断是否借位if(t < 0)  t = 1;else t = 0;}//去除先导0,最多只能存在一个0while(c.size() > 1 && c.back() == 0) c.pop_back();return c;
}
int main(){string a, b;cin >> a >> b ;vector<int> aa, bb;for(int i = a.size()-1; i >= 0; i -- ) aa.push_back(a[i] - '0');for(int i = b.size()-1; i >= 0; i -- ) bb.push_back(b[i] - '0');auto C = sub(aa,bb);//判断结果是否为负数if(!com(aa,bb)) cout<<"-";for(int i = C.size()-1; i >= 0; i -- ) cout<<C[i];return 0;
}

代码模板

高精度加法 —— 模板题 AcWing 791. 高精度加法
// C = A + B, A >= 0, B >= 0
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;}if (t) C.push_back(t);return C;
}
高精度减法 —— 模板题 AcWing 792. 高精度减法
// C = A - B, 满足A >= B, A >= 0, B >= 0
vector<int> sub(vector<int> &A, vector<int> &B)
{vector<int> C;for (int i = 0, t = 0; i < A.size(); i ++ ){t = A[i] - t;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;
}作者:yxc
链接:https://www.acwing.com/blog/content/277/
来源:AcWing

C++ 高精度加减法 (vector实现)相关推荐

  1. 高精度加减法的应用——试解大数之和

    一.前言 我是夏日弥,很高兴看到您来读我的博客, 这一次小夏将为您讲解一道经典的算法竞赛入门题,使用的方法涉及高精度加法和减法,vector动态数组,这是一种比较容易想得到,却不好代码实现的方法. 于 ...

  2. c语言高精度加减法程序,C语言实现高精度加减法

    本文实例为大家分享了C语言实现高精度加减法的具体代码,供大家参考,具体内容如下 首先,我们来看一下C语言中各类型的最值: unsigned int 0-4294967295 int -21474836 ...

  3. 高精度加减法 1000阶乘求法

    1000的阶乘 2568位 #include <iostream.h> #include <string.h> #include <stdlib.h> #inclu ...

  4. C++ 实现高精度的计算

    高精度 高精度数通常使用数组来储存,一般高位在后,低位在前(为了方便处理在最高位进位时的插入操作) 高精度加法 按照手算加法的过程一样即可,需要注意处理进位 代码: //A,B是两个数组,分别存放两个 ...

  5. 国王游戏(贪心 + 高精度乘法 + 高精度除法 + 高精度比较大小)

    题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏. 首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数. 然后,让这 n 位大臣排成一排,国王站在队伍 ...

  6. [HNOI2004]高精度开根

    题目描述 晓华所在的工作组正在编写一套高精度科学计算的软件,一些简单的部分如高精度加减法.乘除法早已写完了,现在就剩下晓华所负责的部分:实数的高精度开m次根. 因为一个有理数开根之后可能得到一个无理数 ...

  7. 【HNOI2004】【BZOJ1213】高精度开根

    Description 晓华所在的工作组正在编写一套高精度科学计算的软件,一些简单的部分如高精度加减法.乘除法早已写完了,现在就剩下晓华所负责的部分:实数的高精度开m次根.因为一个有理数开根之后可能得 ...

  8. POJ9273:PKU2506Tiling_递推+高精度

    总时间限制: 2000ms 单个测试点时间限制: 1000ms 内存限制: 131072kB 描述 对于一个2行N列的走道.现在用12,22的砖去铺满.问有多少种不同的方式. 下图是一个2行17列的走 ...

  9. C++算法(高精度算法)

    高精度运算 高精度的存储和输入输出 单精度与高精度 存储 输入 输出 高精度运算 高精度加法 高精度加法 --代码实现 高精度减法 使用小端序的好处 高精度减法 - 代码实现 高精度乘法 高精度乘法- ...

最新文章

  1. textarea 在浏览器中固定大小和禁止拖动
  2. JavaScript中Window.event详解
  3. python安全攻防---爬虫基础--re解析数据
  4. valgrind检测libevent内存泄露
  5. [图像]张正友论文翻译(2)
  6. java合同管理系统源码下载_合同管理系统 - 源码下载|行业应用软件|源代码 - 源码中国...
  7. NYOJ98 - 成绩转换
  8. 徐俊明《图论及其应用》教学大纲
  9. 宁波大学2014年数学分析考研试题
  10. 金蝶计算机快捷键,金蝶kis系列软件常用快捷键汇总
  11. 51Nod 1007 正整数分组
  12. 批量替换 Word 文档某几页
  13. HydroGo-Pre 水动力学模型建模统一前处理系统使用说明
  14. 群晖Docker容器“failed to initialize logging driver“解决办法
  15. 汉信码(Hanxin Code)与QR码(QR Code)的终极对决
  16. 批量导入手机通讯录_手机QQ批量导入电话号码
  17. python入门教材 52pj_PJzhang:python基础入门的7个疗程-five
  18. 数据库系统概论----关系运算之除运算
  19. SQL Server服务远程过程调用失败解决
  20. 指尖江湖李忘生鸿蒙初开,剑网3指尖江湖李忘生怎么玩 使用攻略

热门文章

  1. 微信、支付宝个人收费码遭叫停,移卡们的新增长故事来了吗?
  2. Android之AndroidStudio输入中文不提示候选字解决办法
  3. 万维网和html关系,万维网与因特网有什么关系?
  4. 如何打开heic文件 为什么电脑打不开heic
  5. 欢乐赚php体验站,一个个人站长的做站经历:快乐并坚持着
  6. 数学对象(Math)
  7. Python字符串排序练习(按字母顺序排序)
  8. 【大话数据结构】——-数据结构
  9. 大数据Hadoop/Spark生态圈技术在公司中的运用
  10. win/lose by a hair 差之毫厘,谬以千里