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

char* w_add(char* a,char* b,char *result)
{
	int lena=strlen(a);
	int lenb=strlen(b);
	int lenc=(lena>=lenb?(lena+1):(lenb+1));
	*(result+lenc+1)='\0';
	int flag=0;
	while(1)
	{
		if(lena==lenb)
		{
			*(result+lenc)=((*(a+lena-1)-'0'+*(b+lenb-1)-'0'+flag)%10)+'0';
			flag=(*(a+lena-1)-'0'+*(b+lenb-1)-'0'+flag)/10;
			lena--;
			lenb--;
			lenc--;
			if(lena==0)
			{
				if(flag==1)
				{
					*(result+lenc)='1';
					result+=lenc;
					return result;
				}
				else
				{
					result+=lenc+1;
					return result;
				}
			}
		}
		if(lena>lenb)
		{
			if(lenb>0)
			{
				*(result+lenc)=((*(a+lena-1)-'0'+*(b+lenb-1)-'0'+flag)%10)+'0';
				flag=(*(a+lena-1)-'0'+*(b+lenb-1)-'0'+flag)/10;
			}
			else
			{
				*(result+lenc)=((*(a+lena-1)-'0'+flag)%10)+'0';
				flag=(*(a+lena-1)-'0'+flag)/10;
			}
			lena--;
			lenb--;
			lenc--;
			if(lena==0)
			{
				if(flag==1)
				{
					*(result+lenc)='1';
					result+=lenc;
					return result;
				}
				else
				{
					result+=lenc+1;
					return result;
				}
			}
		}
		if(lena<lenb)
		{
			if(lena>0)
			{
				*(result+lenc)=((*(a+lena-1)-'0'+*(b+lenb-1)-'0'+flag)%10)+'0';
				flag=(*(a+lena-1)-'0'+*(b+lenb-1)-'0'+flag)/10;
			}
			else
			{
				*(result+lenc)=((*(b+lenb-1)-'0'+flag)%10)+'0';
				flag=(*(b+lenb-1)-'0'+flag)/10;
			}
			lena--;
			lenb--;
			lenc--;
			if(lenb==0)
			{
				if(flag==1)
				{
					*(result+lenc)='1';
					result+=lenc;
					return result;
				}
				else
				{
					result+=lenc+1;
					return result;
				}
			}
		}
	}
}

int main(int argc, char* argv[])
{
	char t[100]={'\0'};
	char* p=w_add("12","12345",t);
	printf("%s\n",p);
	p=w_add("1233333","12345",t);
	printf("%s\n",p);
	p=w_add("12345","12345",t);
	printf("%s\n",p);
	p=w_add("99","99991",t);
	printf("%s\n",p);
	p=w_add("99991","999",t);
	printf("%s\n",p);
	return 0;
}