#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;
}