#include <stdio.h> #include <string.h> #define MAX 256 void bigNumAdd(const char[], const char[], char[]); void strRev(char [], const char []); void delTailZero(char []); int main(){ char num1[MAX], num2[MAX], result[MAX]; while(scanf("%s %s", num1, num2, result)==2){ bigNumAdd(num1, num2, result); printf("%s/n", result); } return 0; } void bigNumAdd(const char a[], const char b[], char c[]){ char n1[MAX], n2[MAX], s[MAX]; int l1, l2, len; int i, carry = 0, e1, e2, sum; /*copy parameters and reserve*/ strRev(n1,a); strRev(n2,b); delTailZero(n1); delTailZero(n2); l1 = strlen(n1); l2 = strlen(n2); len = (l1 > l2) ? l1 : l2; /*add bit 0 to bit len-1*/ for(i=0;i<len;i++){ e1 = (i < l1) ? n1[i] - '0' : 0; e2 = (i < l2) ? n2[i] - '0' : 0; sum = e1 + e2 + carry; s[i] = sum % 10 + '0'; carry = sum / 10; } /*judge if the last bit's carry is available */ if(carry > 0){ s[len] = '1'; s[len+1] = '/0'; }else{ s[len] = '/0'; } strRev(c,s); } void strRev(char des[], const char src[]){ int len, i; len = strlen(src); for(i=0;i<len;i++){ des[i] = src[len-1-i]; } des[len] = '/0'; } void delTailZero(char str[]){ int len, i; len = strlen(str); for(i=len-1;i>=0;i--){ if(str[i]!='0' || i == 0) break; else str[i] = '/0'; } }