#include<iostream>
using namespace std;
const int Max_size = 100; //顺序表的最大长度
template<typename T>
class SeqList{
public:
SeqList():length_(0){}
SeqList(T*input_array,int length);
~SeqList(){};
int Length();
void Insert_data(int i,T x);// 在第i个位置添加x
T Get(int i);
int Locate(T x);
T Delete(int i);
void PrintList();
public:
int length_;
// auto data = new T[Max_size];
T data[Max_size];
};
template<class T>
SeqList<T>::SeqList(T*input_array,int length){
if(length<=0) throw"length error!";
length_ = length;
memcpy(data,input_array,length*sizeof(T));
}
template<class T>
void SeqList<T>::Insert_data(int i,T x){
if(length_>=Max_size)throw"length is max_size!";
if(i<1||i>length_)throw"index error!";
for(int j = length_-1;j>=i-1;j--){
data[j+1] = data[j];
}
data[i-1] = x;
length_++;
}
template<class T>
int SeqList<T>::Length(){
return length_;
}
template<typename T>
T SeqList<T>::Get(int i){
return data[i-1];
}
template<typename T>
T SeqList<T>::Delete(int i){
if(i<0||i>length_)throw"index error!";
T temp = data[i-1];
for(int j =i-1;j<=length_-2;j++){
data[j] = data[j+1];
}
// delete data[length_-1];
length_--;
return temp;
}
template<typename T>
int SeqList<T>::Locate( T x){
for(int i=0;i<length_;i++){
if(data[i]==x){
return i+1;
}
}
throw"not find!";
}
template<typename T>
void SeqList<T>::PrintList(){
for(int i = 0;i<length_;i++){
std::cout<<data[i]<<"\t";
}
std::cout<<endl;
}
void BigIntegerSum(const SeqList<int> a,const SeqList<int> b,SeqList<int> &c);
int main(){
int a[6] = {1,2,5,6,9,7};
int b[8] = {9,6,3,2,1,4,5,6};
SeqList<int> seqlist_a(a,6);
SeqList<int> seqlist_b(b,8);
SeqList<int> sum;
BigIntegerSum(seqlist_a,seqlist_b,sum);
sum.PrintList();
}
void BigIntegerSum(const SeqList<int> a,const SeqList<int> b,SeqList<int> &c){
int m = a.length_;
int n = b.length_;
int i = 0;
int flag = 0;
int max_length = max(m,n);
while(i<m&&i<n){
c.data[i] =(a.data[i]+b.data[i]+flag)%10;
flag = (a.data[i]+b.data[i]+flag)/10;
i++;
}
for(;i<n;i++){
c.data[i] = (b.data[i]+flag)%10;
flag = (b.data[i]+flag)/10;
}
for(;i<m;i++){
c.data[i] = (a.data[i]+flag)%10;
flag = (a.data[i]+flag)/10;
}
if(flag){
max_length = max_length+1;
c.data[max_length-1] = 1;
}
c.length_ = max_length;
}