#include<stdio.h> #include<string.h> #define MAX(a, b) (((a) < (b)) ? (b) : (a)) #define MAXBIT 100 int pos[MAXBIT]; char* str_reverse(char *s) { char* p = s; size_t len = strlen(p); char tmp; for(size_t i = 0; i < len / 2; ++i) { tmp = *(p + i); *(p + i) = *(p + len - i - 1); *(p + len - i - 1) = tmp; } return s; } char* big_int_add(const char *lhs, const char *rhs, char *result_buf, size_t buf_size) { if(lhs == NULL || rhs == NULL) return NULL; size_t llen = strlen(lhs); size_t rlen = strlen(rhs); if(MAX(llen, rlen) + 1 > buf_size || MAX(llen, rlen) > MAXBIT) return NULL; if(llen < rlen) { const char *p = lhs; lhs = rhs; rhs = p; llen ^= rlen; rlen ^= llen; llen ^= rlen; } memset(pos, 0, sizeof(pos)); memset(result_buf, 0, buf_size); int bit_sum = 0; size_t i = 0; lhs += llen; rhs += rlen; for(; i < rlen; ++i) { bit_sum = *(--lhs) - '0' + *(--rhs) - '0' + pos[i]; *(result_buf + i) = (char)((bit_sum) % 10 + '0'); if(bit_sum > 9) pos[i + 1] = 1; } for(; i < llen; ++i) { bit_sum = *(--lhs) - '0' + pos[i]; *(result_buf + i) = (char)((bit_sum % 10) + '0'); if(bit_sum > 9) pos[i + 1] = 1; } if(pos[i] == 1) *(result_buf + i) = (char)(pos[i] + '0'); return str_reverse(result_buf); } int main() { char n1[100]; char n2[100]; scanf("%s", n1); scanf("%s", n2); char result[100]; printf("sum is : %s/n", big_int_add(n1, n2, result, 100)); return 0; }