#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


本文转载:CSDN博客