I have tried all the test cases in the forum and got correct answer for all of them.I have considered the situation in which one of the numbers is zero, since it's mentioned that numbers are positive.
Can any one of you help me out? Here is my code
#include <stdio.h>
#include <string>
#include <stdlib.h>
#include <iostream>
using namespace std;
void addi(char *s,int size,int pos)
{
char *sum;
int l1=pos,l2=size-pos-1;
int maxl=(l1>=l2)?l1:l2;
sum = (char*)malloc((maxl+1)*sizeof(char));
int c=0,k=maxl,m,n;
for(m=pos-1,n=size-1;m>=0&&n>pos;m--,n--)
{
int a=s[m]-'0',b=s[n]-'0',ts;
ts=a+b+c;
if(ts>=10)
{
c=1;
}
else c=0;
sum[k--]=ts%10;
//printf("a=%d b=%d c=%d sum[%d]=%d\n",a,b,c,k+1,sum[k+1]);
}
//printf("m=%d n=%d\n",m,n);
if(m!=-1)
{
while(m>=0)
{
int a=s[m]-'0',b=0,ts=a+b+c;
if(ts>=10) c=1;
else c=0;
sum[k--]=ts%10;
//printf("a=%d b=%d c=%d sum[%d]=%d\n",a,b,c,k+1,sum[k+1]);
m--;
}
}
else if(n!=pos)
{
while(n>pos)
{
int a=0,b=s[n]-'0',ts=a+b+c;
if(ts>=10) c=1;
else c=0;
sum[k--]=ts%10;
//printf("a=%d b=%d c=%d sum[%d]=%d\n",a,b,c,k+1,sum[k+1]);
n--;
}
}
if(m==-1&&n==pos) if(c==1) sum[k--]=c;
//printf("k=%d\n",k);
int l3=maxl-k,sp1=0,sp2=0,sp3=0,sp;
//printf("l1=%d l2=%d l3=%d\n",l1,l2,l3);
if(l1>=l2+1)
{
if(l2+1>=l3)
{
sp1=0;sp2=l1-l2-1;sp3=l1-l3;sp=l1;
}
else if(l1>l3)
{
sp1=0;sp2=l1-l2-1;sp3=l1-l3;sp=l1;
}
else
{
sp1=l3-l1;sp2=l3-l2-1;sp3=0;sp=l3;
}
}
else
{
if(l1>=l3)
{
sp1=l2+1-l1;sp2=0;sp3=l2+1-l3;sp=l2+1;
//printf("sp=%d sp1=%d sp2=%d sp3=%d\n",sp,sp1,sp2,sp3);
//printf("yes\n");
}
else if(l2+1>=l3)
{
sp1=l2+1-l1;sp2=0;sp3=l2+1-l3;sp=l2+1;
//printf("2bbnd\n");
}
else
{
sp1=l3-l1;sp2=l3-l2-1;sp3=0;sp=l3;
//printf("thrid\n");
}
}
//printf("sp=%d sp1=%d sp2=%d sp3=%d\n",sp,sp1,sp2,sp3);
for(int i=0;i<sp1;i++) {printf(" ");}
for(int i=0;i<l1;i++)
{
printf("%c",s[i]);
}
printf("\n");
for(int i=0;i<sp2;i++)
{
printf(" ");
}
printf("+");
int g=pos+1;
for(int i=0;i<l2;i++)
{
printf("%c",s[g++]);
}
printf("\n");
if(l3>=l2+1)
{
sp=l3;
}
else
{
sp=l2+1;
}
for(int i=0;i<l1-sp;i++)
{
printf(" ");
}
for(int i=0;i<sp;i++)
{
printf("-");
}
printf("\n");
for(int i=0;i<sp3;i++) printf(" ");
for(int i=k+1;i<maxl+1;i++) printf("%d",sum[i]);
printf("\n");
}
void sub(char *s,int size,int pos)
{
char *sum;
int l1=pos,l2=size-pos-1;
int maxl=(l1>=l2)?l1:l2;
sum = (char*)malloc((maxl)*sizeof(char));
int c=0,k=maxl-1,m,n;
for(m=pos-1,n=size-1;m>=0&&n>pos;m--,n--)
{
int a=s[m]-'0',b=s[n]-'0';
if(a+c>=b) {sum[k--]=a-b+c;c=0;}
else
{
sum[k--]=a+c-b+10;
c=-1;
}
//printf("a=%d b=%d c=%d sum[%d]=%d\n",a,b,c,k+1,sum[k+1]);
}
//printf("m=%d n=%d\n",m,n);
if(m!=-1)
{
while(m>=0)
{
int a=s[m]-'0',b=0;
if(a+c>=b) {sum[k--]=a-b+c;c=0;}
else
{
sum[k--]=a+c-b+10;
c=-1;
}
//printf("a=%d b=%d c=%d sum[%d]=%d\n",a,b,c,k+1,sum[k+1]);
m--;
}
}
//if(m==-1&&n==pos) if(c==1) sum[k--]=c;
for(int i=0;i<maxl;i++) if(sum[i]) { k=i;break;}
//printf("k=%d\n",k);
int l3=maxl-k,sp1=0,sp2=0,sp3=0,sp;
if(l1>=l2+1)
{
if(l2+1>=l3)
{
sp1=0;sp2=l1-l2-1;sp3=l1-l3;sp=l1;
}
else if(l1>l3)
{
sp1=0;sp2=l1-l2-1;sp3=l1-l3;sp=l1;
}
else
{
sp1=l3-l1;sp2=l3-l2-1;sp3=0;sp=l3;
}
}
else
{
if(l1>=l3)
{
sp1=l2+1-l1;sp2=0;sp3=l2+1-l3;sp=l2+1;
}
else if(l2+1>=l3)
{
sp1=l2+1-l1;sp2=0;sp3=l2+1-l3;sp=l2+1;
}
else
{
sp1=l3-l1;sp2=l3-l2-1;sp3=0;sp=l3;
}
}
//printf("sp=%d sp1=%d sp2=%d sp3=%d\n",sp,sp1,sp2,sp3);
for(int i=0;i<sp1;i++) {printf(" ");}
for(int i=0;i<l1;i++)
{
printf("%c",s[i]);
}
printf("\n");
for(int i=0;i<sp2;i++)
{
printf(" ");
}
printf("-");
int g=pos+1;
for(int i=0;i<l2;i++)
{
printf("%c",s[g++]);
}
printf("\n");
if(l3>=l2+1)
{
sp=l3;
}
else
{
sp=l2+1;
}
for(int i=0;i<l1-sp;i++)
{
printf(" ");
}
for(int i=0;i<sp;i++)
{
printf("-");
}
printf("\n");
for(int i=0;i<sp3;i++) printf(" ");
for(int i=k;i<maxl;i++) printf("%d",sum[i]);
printf("\n");
}
void mult(char *s,int size,int pos)
{
int l1=pos,l2=size-pos-1;
char **sum,*product;
//printf("mult\n");
sum=(char**)malloc(l2*sizeof(char*));
int *len=(int*) malloc((l2)*sizeof(int));
for(int i=0;i<l2;i++) len[i]=0;
//printf("adf\n");
product=(char*)malloc((l1+l2)*sizeof(char));
for(int i=0;i<l2+l1;i++) product[i]=0;
//printf("pr0=0 sum[0][0]\n");
for(int i=0;i<l2;i++)
{
//printf("int\n");
sum[i]=(char*) malloc((l1+1)*sizeof(char));
sum[i][0]='0';
//printf("int1\n");
}
//printf("sumi0=0\n");
int row=0;
for(int i=size-1;i>pos;i--,row++)
{
int b=s[i]-'0',c=0;
int col=l1;
//printf("innerlop\n");
for(int j=pos-1;j>=0;j--,col--)
{
int a=s[j]-'0';
int pr=a*b+c;
if(pr>=10)
{
//printf("befpr>10 i=%d j=%d row=%d col=%d\n",i,j,row,col);
sum[row][col]=pr%10;
c=pr/10;
//printf("aftpr>10 i=%d j=%d row=%d col=%d\n sum=%d",i,j,row,col,sum[row][col]);
}
else
{
//printf("befpr<10 i=%d j=%d row=%d col=%d\n",i,j,row,col);
sum[row][col]=pr;
c=0;
//printf("aftpr<10 i=%d j=%d row=%d col=%d\n sum=%d",i,j,row,col,sum[row][col]);
}
}
sum[row][col]=c;
if(!c)
{
len[row]=l1;
}
else
{
len[row]=l1+1;
}
if(!b) len[row]=1;
}
//for(int i=0;i<l2;i++) printf("len[%d]=%d\n",i,len[i]);
int car=0,m=l2+l1-1,n=0,temp=0;
for(int n=l1;n>=0;n--)
{
int i=0,k=n;
temp=0;
while(i<l2&&k<l1+1)
{
temp+=sum[i++][k++];
}
temp+=car;
if(temp>=10)
{
product[m]=(temp)%10;
car=temp/10;
m--;
}
else
{
product[m]=(temp);
car=0;
m--;
}
//printf("product[%d]=%d\n",m+1,product[m+1]);
}
//printf("m=%d n=%d\n",m,n);
for(int n=1;n<l2;n++)
{
int i=n,k=0;
temp=0;
while(i<l2&&k<l1+1)
{
temp+=sum[i++][k++];
}
temp+=car;
if(temp>=10)
{
product[m]=temp%10;
car=temp/10;
m--;
}
else
{
product[m]=temp;
car=0;m--;
}
//printf("product[%d]=%d\n",m+1,product[m+1]);
}
product[m]=car;
int prlen;
if(product[0]) prlen=l2+l1;
else prlen=l2+l1-1;
//printf("m=%d n=%d prlen=%d l1=%d l2=%d\n",m,n,prlen,l1,l2);
int max=prlen;
if(prlen<l2+1) max=l2+1;
for(int i=0;i<max-l1;i++)
{
printf(" ");
}
for(int i=0;i<l1;i++)
{
printf("%c",s[i]);
}
printf("\n");
for(int i=0;i<max-l2-1;i++)
{
printf(" ");
}
for(int i=pos;i<size;i++)
{
printf("%c",s[i]);
}
printf("\n");
if(len[0]>=l2+1)
{
for(int i=0;i<max-len[0];i++)
{
printf(" ");
}
for(int i=0;i<len[0];i++)
{
printf("-");
}
}
else
{
for(int i=0;i<max-l2-1;i++)
{
printf(" ");
}
for(int i=0;i<l2+1;i++)
{
printf("-");
}
}
printf("\n");
for(int i=0;i<l2;i++)
{
//printf("as i=%d len[i]=%d j=%d l1+1=%d",i,len[i],l1-len[i]+1,l1+1);
for(int j=0;j<max-len[i]-i;j++)
{
printf(" ");
}
//printf("i=%d len[i]=%d j=%d l1+1=%d",i,len[i],l1-len[i]+1,l1+1);
for(int j=l1-len[i]+1;j<l1+1;j++)
{
//printf("ai=%d j=%d",i,j);
printf("%d",sum[i][j]);
}
printf("\n");
}
for(int i=0;i<max-prlen;i++)
{
printf(" ");
}
for(int i=0;i<prlen;i++)
{
printf("-");
}
printf("\n");
for(int i=0;i<max-prlen;i++)
{
printf(" ");
}
for(int i=l1+l2-prlen;i<l1+l2;i++)
{
printf("%d",product[i]);
}
printf("\n");
}
int main()
{
int t;
scanf("%d",&t);
for(int i=0;i<t;i++)
{
char s[1001];
scanf("%s",s);
int op=0,pos;
int a,b,j;
for(j=0;s[j]!='\0';j++)
{
if(s[j]=='+')
{
//printf("addi\n");
op=1;
pos=j;
}
else if(s[j]=='-')
{
//printf("sub\n");
op=2;
pos=j;
}
else if(s[j]=='*')
{
//printf("mult\n");
op=3;
pos=j;
}
}
if(op==1)
{
addi(s,j,pos);
printf("\n");
}
else if(op==2)
{
sub(s,j,pos);
printf("\n");
}
else if(op==3)
{
mult(s,j,pos);
printf("\n");
}
}
}