大整数的加法
需要模拟加法的过程
第一种思路:
把加法进位统一处理
第二种思路:
进位边做边处理
//author:zq
#include<iostream>
#include<string>
using namespace std;
int main(){
//高精度加法
string a,b,c;
int h;
cin>>a>>b;
if(a.length()<b.length()){
c=a;
a=b;
b=c;
}
//cout<<a[0]<<endl<<b[0]<<endl;
h=a.length();
int s[h+5]={0};
int s1,s2;
for(int i=0;i<b.length();i++){
s1=b[b.length()-1-i]-'0';
s2=a[a.length()-1-i]-'0';
s[i]=s1+s2;
// cout<<i<<" "<<s[i]<<endl;
}
for(int j=b.length();j<a.length();j++){
s2=a[a.length()-1-j]-'0';
s[j]=s2;
// cout<<j<<" "<<s[j]<<endl;
}
for(int i=0;i<a.length();i++){
if(s[i]>9){
s[i+1]=s[i+1]+1;
s[i]=s[i]-10;
}
}
int hs=h+3;
while(s[hs]==0)hs--;
for(int i=hs;i>=0;i--){
cout<<s[i];
}
return 0;
}
//author:zq
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
void Switch(string &a,string &b){
string c=a;
a=b;
b=c;
}
int main(){
string a,b;
int len1,len2,p;
while(cin>>a>>b){
vector<int>obj;
len1=a.size();
len2=b.size();
if(len2<len1){
Switch(a, b);
}
int remain=0;
int i=a.size()-1;
int j=b.size()-1;
for(;i>=0;i--,j--){
p=a[i]-'0'+b[j]-'0'+remain;
if(p>=10){
remain=1;
p=p-10;
obj.push_back(p);
}else{
obj.push_back(p);
remain=0;
}
}
for(;j>=0;j--){
p=b[j]-'0'+remain;
if(p>=10){
remain=1;
p=p-10;
obj.push_back(p);
}else{
obj.push_back(p);
remain=0;
}
}
if(remain==1){
obj.push_back(1);
}
for(int k=obj.size()-1;k>=0;k--){
cout<<obj[k];
}
obj.clear();
cout<<endl;
}
return 0;
}