c++ 高精度加法
输入:
两个数值输入,分别代表加数和被加数,数值位数10万级,所以说对于int还是long long 的数据类型都放不下。
输出:
一行,两个数据的和。
注意:
写代码的时候测试了一下,int 是4个字节,long long 是8个字节,8个字节的数是64位的,其最大值位2的64次方 = 18,446,744,073,709,551,616。数据是才20位,和10万位差的不是一点半点,所以直接运算是行不通的。
高精度算法题解:
将输入的数据看作字符,按照加法的原理,一位一位的运算,就是像小学的加法运算:列出算式,从最低为开始算,逢十进一。
注意:计算的两个数可能位数不同,我们习惯把位数长的值放在上面。
-------1234
–+
----------23
-------------------------
-------1257
该题构造函数写了引用,其实写不写效果都能实现,对本题无影响。
#include <iostream>
#include <vector>
using namespace std;
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;
}
int main()
{
string a, b;
vector<int> A, B;//注意
cin >> 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');
auto C = add(A, B);
for(int i = C.size() - 1; i >= 0; i--) printf("%d", C[i]);
return 0;
}
代码解释
该代码使用了vector 容器,它属于C++STL标准库中的资源。C++STL标准库资源的三大核心组件:容器、算法、迭代器。
注意:
定义vector<int> A;//需要标注数据类型
函数调用,是要引用一下
,vector< int> add(vector < int > &A, vector < int > & B)
A.push_back(a[i]);相当于一个数组,从0开始向后放。