#include<iostream>
using namespace std;
void sum(char *a, char *b, char *sum);
int main()
{
char a[] = "5234563847377488737676663332233456612345678333445";
char b[] = "9567832990876544556677777345512345678901234";
const int size = 100;
char c[size];
memset(c, 0, sizeof(char)*size);
sum(a, b, c); //求和
//处理之前,c数组数字个数比较长的那个a多一位
if('0'==c[0])
{
for(int i=0; i<size; i++)
{
c[i] = c[i+1];
}
}
cout<<c<<endl;
return 0;
}
void SumExt(char *a, char *b, char *sum, int aLength, int bLength) //aLength一定比bLength长
{
if(NULL==a || NULL==b || NULL==sum)
{
return;
}
if(aLength<bLength)
{
return;
}
int length = aLength + 1;
char zero = '0';
int temp = 0;
char one = '1';
char carry = zero;
while(1)
{
temp = 0;
if(bLength>0)
{
temp = (int)((a[aLength-1] - zero) + (b[bLength-1] - zero) + (carry - zero));
aLength--;
bLength--;
}
else
{
if(aLength>0)
{
temp = (int)((a[aLength-1] - zero) + (carry - zero));
aLength--;
}
else
{
temp = (int)(carry - zero);
}
}
if(temp/10==1)
{
carry = one;
}
else
{
carry = zero;
}
sum[length-1] = temp%10 + zero;
length--;
if(length<0)
{
break;
}
}
}
void sum(char *a, char *b, char *sum)
{
if(NULL==a || NULL==b || NULL==sum)
{
return;
}
int aLength = strlen(a);
int bLength = strlen(b);
if(aLength>=bLength)
{
SumExt(a, b, sum, aLength, bLength);
}
else
{
SumExt(b, a, sum, bLength, aLength);
}
}