BigNum add(BigNum a, BigNum b){
//if |a| > |b| reverse terms
if(|a|>|b|) return(add(b,a));
BigNum sum; // |a| <= |b|
carry = 0
for(i = 0;i<= digits of a; i++){
temp = a[i] + b[i] + carry
//carry is always 1 or 0
carry = temp/10
sum[i] = temp % 10
}
for(i=(digits of a) + 1;
i<=digits of b; i++){
//copy the rest of b, and
//keep track of past carries
temp = b[i] + carry
carry = temp/10
sum[i] = temp % 10
}
if (carry) sum(i) = carry;
return sum;
}