#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