#include <iostream>
using namespace std;
// 设a, b都对应非负数
void add(char *a, char *b, char *c)
{
int aLen = strlen(a);
int bLen = strlen(b);
char *q;
int k;
if(aLen < bLen)
{
q = a;
a = b;
b = q;
k = aLen;
aLen = bLen;
bLen = k;
}
int maxLen = aLen + 1; // 相加后可能的最大位数
char *p = new char[maxLen + 1];
memset(p, 0, maxLen + 1); // 加1是为了存储'\0'
int i;
int diffLen = aLen - bLen;
for(i = aLen - 1; i >= diffLen; i--)
{
p[i + 1] = (a[i] - '0') + (b[i - diffLen] - '0') + '0';
}
for(i = diffLen - 1; i >= 0; i--)
{
p[i + 1] = a[i];
}
p[0] = '0'; // 千万别搞漏掉这一句
for(i = aLen; i >= 1; i--)
{
if(p[i] - '0' >= 10)
{
p[i] -= 10;
p[i - 1] += 1;
}
}
char *s = p;
if('0' == p[0])
{
p++;
}
strcpy(c, p);
delete s;
}
int main()
{
char a[101] = "999999999999999999999999999999999999999999999999999999";
char b[101] = "999999999999999999999999999999999999999999999999999999";
char c[102];
add(a, b, c);
cout << c << endl;
return 0;
}
结果为:
1999999999999999999999999999999999999999999999999999998