高精度加法
AC解法,这题思路就是照着代码自己手写一次运行过程就懂了!
#include<bits/stdc++.h>
const int N=100086;
using namespace std;
void add(vector<int>& A,vector<int>& B,vector<int>& C){//该算法是从最后面加起来的
if(A.size()<B.size()){
add(B,A,C);
return;
}
int t=0;//表示进位,每次两个数加的变量
for(unsigned 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);//如果也有进位,那么加到最后面
}
int main(){
vector<int> A,B,C;
string a,b;
while(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');
add(A,B,C);
for( int i=C.size()-1;i>=0;--i) cout<<C[i];
cout<<endl;
A.clear();
B.clear();
C.clear();
}
}
中间发生的错误,main函数里面加了unsigned之后段错误,不知道为啥,可能是有隐式类型转换导致的段错误!!
#include<bits/stdc++.h>
const int N=100086;
using namespace std;
void add(vector<int>& A,vector<int>& B,vector<int>& C){
if(A.size()<B.size()){
add(B,A,C);
return;
}
unsigned int t=0;
for(unsigned 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);
}
int main(){
vector<int> A,B,C;
string a,b;
while(cin>>a>>b){
for(unsigned int i=a.size()-1;i>=0;--i) A.push_back(a[i]-'0');
for(unsigned int i=b.size()-1;i>=0;--i) B.push_back(b[i]-'0');
add(A,B,C);
for(unsigned int i=C.size()-1;i>=0;--i) cout<<C[i];
cout<<endl;
A.clear();
B.clear();
C.clear();
}
}