#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;
}原文地址:http://chhquan.blog.51cto.com/1346841/1567517