思路:
26进制的大数相加
注意:1) AAAAA * (*表示任意一个字符) 为*
2) AAAA AAAA 只能输出一个A
3) 数组开的大一点,比如说500
#include <iostream>
using namespace std;
#define N 500
char stra[N];
char strb[N];
char strc[N];
void Add(char a[], char b[])
{
int i, j, k, an, bn, carry;
an = strlen(a);
bn = strlen(b);
memset(strc, 0, sizeof(strc));
if (an < bn)
{
memcpy(strc, a, sizeof(char) * (an+1) );
memcpy(a, b, sizeof(char) * (bn + 1));
memcpy(b, strc, sizeof(char) * (an + 1));
i = an;
an = bn;
bn = i;
}
carry = 0;
i = an - 1;
j = bn - 1;
k = N - 1;
memset(strc, 0, sizeof(strc));
while(j >= 0)
{
carry = a[i] - 'A' + b[j] - 'A' + carry;
strc[k--] = carry % 26 + 'A';
carry /= 26;
--i;
--j;
}
while(i >= 0)
{
carry = a[i] - 'A' + carry;
strc[k--] = carry % 26 + 'A';
carry /= 26;
--i;
}
while (carry)
{
strc[k--] = carry % 26 + 'A';
carry /= 26;
}
++k;
while(k < N && strc[k] == 'A') ++k;
memset(a, 0, sizeof(char) * N);
if (k == N)
{
k--;
}
memcpy(a, strc + k, sizeof(char) * k);
}
int main()
{
while(scanf("%s %s", stra, strb) != EOF)
{
Add(stra, strb);
printf("%s\n", stra);
}
return 0;
}