高精度加法是基于我们计算加法而设计的一种算法,在C++中我们创建的整数位数不能过大,当我们有大整数计算需求时,就要用到这个算法。
#include<iostream>
#include<vector>
using namespace std;
vector<int> add(vector<int>&A,vector<int>&B)//主体函数的功能是S
{
vector<int >C;
int t=0;
for(int i=0;i<A.size()||i<B.size();i++)
{
if(i<A.size())t+=A[i];//这里是if()条件句 不是for()
if(i<B.size())t+=B[i];
C.push_back(t%10);
t/=10;
}
if(t)C.push_back(1);
return C;
}
这是高精度加法的功能函数,在这里我们需要传进两个向量类,向量类的作用其实是为了更方便地处理数据,用数组也没问题。
这个函数模仿了我们人类计算加法的思路,即逢十进一。
for(int i=0;i<A.size()||i<B.size();i++)
{
if(i<A.size())t+=A[i];//这里是if()条件句 不是for()
if(i<B.size())t+=B[i];
C.push_back(t%10);
t/=10;
}
这段代码中for循环同时涉及到A,B两个向量类,if语句也是如此,这是为了防止两个大整数的位数不同而导致出错,比如1234+123,如果没有for 和 if 语句,1234中的1无法参与运算。
C.push_back语句的作用是把A[i]+B[i]的结果落下来,比如1234+123,计算的时候我们是先算4+3=7,这样会把7落下来,这条语句的作用就是如此。
t/=10的作用是以防计算出现进一的情况,比如15+17,算5+7=12,计算十位1+1的时候要加上个位计算进上来的1,这条语句的作用就是如此。
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');
auto C=add(A,B);
for(int i=C.size()-1;i>=0;i--)cout<<C[i];
}
这是算法主函数部分,主函数做的工作主要是建立并初始化两个向量类用于计算,建立向量类时,是将每个字符串从最后一位开始往外拿,这样我们就可以从个位开始做加法了。
注意最后输出的时候也是从后往前输出。
标签:语句,心得体会,高精度,int,--,计算,加法,向量 From: https://blog.csdn.net/Lyh0410/article/details/141719194