编写思路 :
由于超过long long范围的实数无法在计算机上进行运算 ,但是可以用数组来存放每个单个数字,用数组来模拟人脑进行高精度加法。
将两个字符串型的数相加,得到的结果仍然用字符串数组来存放。这样做的好处就是可以把函数接口反复调用来实现多次高精度加法计算。
话不多说,下面直接上码上注释!
C++写法:
#include<iostream>
#include<algorithm>
#include<string.h>
#define lnt long long
using namespace std;
string plus_ab(string a,string b){
//逆置a,b(便于思维理解、程序编写)
reverse(a.begin(),a.end()); reverse(b.begin(),b.end());
//ans存储结果,初始化ans
string ans; ans=a.size()>b.size()?a:b;
ans.resize(max(a.size(),b.size())+1); ans[ans.size()-1]='0';
for(int i=0;i<ans.size();++i) ans[i]-='0';
//下面高精加核心代码
string *min_length=a.size()<=b.size()?&a:&b; //min_length指向较短的串(ans的另一条串)
for(int i=0;i<(*min_length).size();++i) ans[i]+=((*min_length)[i]-'0');
//进位
for(int j=0;j<ans.size();++j)
if(ans[j]>=10){
ans[j+1]+=ans[j]/10;
ans[j]=ans[j]%10;
}
//将每一位从ASCLL 转换成 char型
for(int i=0;i<ans.size();++i) ans[i]+='0';
//逆置ans数组(便于输出)
reverse(ans.begin(),ans.end());
//判断首位是否为 0
if(ans[0]=='0') ans.erase(0,1);
return ans;
}
int main(){
string a,b; cin>>a>>b;
cout<<plus_ab(a,b)<<endl;
return 0;
}
初级小白(在校生)整理以用作学习,若有错误,还望指正,共勉!
初次书写,若存在侵权或其他问题,定立即改正,还望海涵。