/*요즘 군대에서 www.codepad.org로 코딩을 하는데; 어디서 프로그램이 터지는지 알고 싶습니다..
메인함수에서 printf함수를 호출해도 문자열도 출력도 안되고 ㅠㅠ.. 한번만 디버깅즘 ㅎㅐ주시면 안되겠습니까?
저는 군인입니다...*/

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

#define NULLSPACE 1
#define CHARPARSINT(x) x - 48
#define INTPARSCHAR(x) x + 48

/*
#define LEFT   0
#define RIGHT  1
#define EQUAL  2
*/
enum { LEFT = 0, RIGHT, EQUAL };

int   compareoflen(char*,char*);
int   howlongsize(char*);
char* makespace(char*,char*);
char* lastpointer(char*);

char* sum(char*,char*);
char* more_big_l(char*,char*);
char* same_size(char*,char*);

int main()
{
  printf(\"%s\",sum(\"11\",\"11\"));
  return 0;
}
char* sum(char* l,char* r)
{
   int morelen = compareoflen(l,r);

   if ( morelen == RIGHT ) {
      return more_big_l(r,l);
   } else if ( morelen == LEFT ) return more_big_l(l,r);
   return same_size(l,r);
}
char* same_size(char* l,char* r)
{
   char* total  = makespace(l,r);
   char* ptotal = lastpointer(total);
   int   len    = howlongsize(ptotal);
   int   i      = 0;  
   int   result = 0;  
   l            = lastpointer(l);
   r            = lastpointer(r);
  
   ptotal[--len] = \'\\0\';
  
   for ( i = len - 1 ; i <= 0 ; i-- ) {
        result = CHARPARSINT(*l) + CHARPARSINT(*r);
        if ( result >= 10 ){
           ptotal[i - 1] = INTPARSCHAR(1);
           //INTPARSCHAR(CHARPARSINT(ptotal[len - 1]) + result);           
           ptotal[i]  = INTPARSCHAR(result-10);
        } else {
           ptotal[i] = INTPARSCHAR(result);
        }
   }
   
   return total;
}
char* more_big_l(char* l,char* r)
{
   char* total  = makespace(l,r);
   char* ptotal = lastpointer(total);
   r           = lastpointer(r);
   l           = lastpointer(l);
  
   /*
        be working...
   */
  
   return total;
}
char* makespace(char* l,char* r)
{

   int   i;
   char* n = NULL;
   int   compare = compareoflen(l,r);
   int   OVERNUMBER = 0;
   int   size = 0;

   if ( CHARPARSINT(*l) + CHARPARSINT(*r) > 9 ) OVERNUMBER = 1;
      switch ( compare ){
      case LEFT:
      case EQUAL:
        n = (char*)malloc(size = strlen(l) + NULLSPACE + OVERNUMBER);
        break;
      case RIGHT:
        n = (char*)malloc(size = strlen(r) + NULLSPACE + OVERNUMBER);
      }   

   memset(n,0,size);
  
   return n;
}
int compareoflen(char* l,char* r)
{
   int lLen = strlen(l);
   int rLen = strlen(r);

   if ( lLen > rLen ) return LEFT;
   else if ( lLen < rLen ) return RIGHT;
  
   return EQUAL;
}
char* lastpointer(char* n)
{
    char* p = n;
   
    while( p++ ){
       if ( *p < \'0\' || *p > \'9\' ) break;
    }

    return --p;
}
int howlongsize(char* n)
{
   int len = 1;
   char* p = n;
  
   while( p++ ){
      if ( *p < \'0\' || *p > \'9\' ) break;
      len++;
    }
 
   return len;
}