首页 > 代码库 > 大整数字符串相加

大整数字符串相加

#include <stdio.h>
#include <string.h>

char *reverse(char *str)
{
    int i, j;
    for (i = 0, j = strlen(str) - 1; i < j; ++i, --j) {
        char tmp = str[i];
        str[i] = str[j];
        str[j] = tmp;
    }
    return str;
}

char *strsum(const char *add1, const char *add2, char *result)
{
	int i, j, k;
	int carry = 0;
	for (i = strlen(add1) - 1, j = strlen(add2) - 1, k = 0; 
	     i >= 0 || j >= 0; --i, --j, ++k) 
	{
		int a1, a2, sum;
		a1 = (i >= 0 ? (add1[i] - ‘0‘) : 0);
		a2 = (j >= 0 ? (add2[j] - ‘0‘) : 0);
		sum = carry + a1 + a2;
		result[k] = (char)(0xff & (sum % 10 + ‘0‘));
		carry = sum / 10;
	}
	if (carry) {
		result[k++] = carry + ‘0‘;
	}
	result[k] = ‘\0‘;
	return reverse(result);
}

int main()
{
	char add1[256];
	char add2[256];
	char result[260];
	scanf("%s", add1);
	scanf("%s", add2);
	printf("%s\n", strsum(add1, add2, result));
	return 0;
}


大整数字符串相加