C++ 高精度加减法 (vector实现)
前言
在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实现)相关推荐
- 高精度加减法的应用——试解大数之和
一.前言 我是夏日弥,很高兴看到您来读我的博客, 这一次小夏将为您讲解一道经典的算法竞赛入门题,使用的方法涉及高精度加法和减法,vector动态数组,这是一种比较容易想得到,却不好代码实现的方法. 于 ...
- c语言高精度加减法程序,C语言实现高精度加减法
本文实例为大家分享了C语言实现高精度加减法的具体代码,供大家参考,具体内容如下 首先,我们来看一下C语言中各类型的最值: unsigned int 0-4294967295 int -21474836 ...
- 高精度加减法 1000阶乘求法
1000的阶乘 2568位 #include <iostream.h> #include <string.h> #include <stdlib.h> #inclu ...
- C++ 实现高精度的计算
高精度 高精度数通常使用数组来储存,一般高位在后,低位在前(为了方便处理在最高位进位时的插入操作) 高精度加法 按照手算加法的过程一样即可,需要注意处理进位 代码: //A,B是两个数组,分别存放两个 ...
- 国王游戏(贪心 + 高精度乘法 + 高精度除法 + 高精度比较大小)
题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏. 首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数. 然后,让这 n 位大臣排成一排,国王站在队伍 ...
- [HNOI2004]高精度开根
题目描述 晓华所在的工作组正在编写一套高精度科学计算的软件,一些简单的部分如高精度加减法.乘除法早已写完了,现在就剩下晓华所负责的部分:实数的高精度开m次根. 因为一个有理数开根之后可能得到一个无理数 ...
- 【HNOI2004】【BZOJ1213】高精度开根
Description 晓华所在的工作组正在编写一套高精度科学计算的软件,一些简单的部分如高精度加减法.乘除法早已写完了,现在就剩下晓华所负责的部分:实数的高精度开m次根.因为一个有理数开根之后可能得 ...
- POJ9273:PKU2506Tiling_递推+高精度
总时间限制: 2000ms 单个测试点时间限制: 1000ms 内存限制: 131072kB 描述 对于一个2行N列的走道.现在用12,22的砖去铺满.问有多少种不同的方式. 下图是一个2行17列的走 ...
- C++算法(高精度算法)
高精度运算 高精度的存储和输入输出 单精度与高精度 存储 输入 输出 高精度运算 高精度加法 高精度加法 --代码实现 高精度减法 使用小端序的好处 高精度减法 - 代码实现 高精度乘法 高精度乘法- ...
最新文章
- textarea 在浏览器中固定大小和禁止拖动
- JavaScript中Window.event详解
- python安全攻防---爬虫基础--re解析数据
- valgrind检测libevent内存泄露
- [图像]张正友论文翻译(2)
- java合同管理系统源码下载_合同管理系统 - 源码下载|行业应用软件|源代码 - 源码中国...
- NYOJ98 - 成绩转换
- 徐俊明《图论及其应用》教学大纲
- 宁波大学2014年数学分析考研试题
- 金蝶计算机快捷键,金蝶kis系列软件常用快捷键汇总
- 51Nod 1007 正整数分组
- 批量替换 Word 文档某几页
- HydroGo-Pre 水动力学模型建模统一前处理系统使用说明
- 群晖Docker容器“failed to initialize logging driver“解决办法
- 汉信码(Hanxin Code)与QR码(QR Code)的终极对决
- 批量导入手机通讯录_手机QQ批量导入电话号码
- python入门教材 52pj_PJzhang:python基础入门的7个疗程-five
- 数据库系统概论----关系运算之除运算
- SQL Server服务远程过程调用失败解决
- 指尖江湖李忘生鸿蒙初开,剑网3指尖江湖李忘生怎么玩 使用攻略