Add two very large number using linked list

/*this program will add two large number(any number of digits)*/

#include<stdio.h>
#include<stdlib.h>
typedef struct linked
{
int val;
struct linked *next;
}lnk;


lnk *create();

lnk *add(lnk *,lnk *);

void disp(lnk *);

int main()
{
lnk *h1,*h2,*h3;

printf("\n\nEnter the first large number : ");
h1=create();
printf("\n\nEnter the second large number : ");
h2=create();
h3=add(h1,h2);

printf("\n\nResultant number : ");
disp(h3);
return 0;
}


lnk *create()
{
int a,m;
lnk *temp,*h=NULL;
char ch;
while((ch=getch())!=13)
{
printf("%c",ch);
temp=(lnk*)malloc(sizeof(lnk));
temp->val=ch-'0';
temp->next=h;
h=temp;
}
return h;
}

lnk *add(lnk *h1,lnk *h2)
{
lnk *h3=NULL,*temp,*ptr;
int cr,t=0;
while(h1!=NULL && h2!=NULL)
{
t=h1->val+h2->val+t;
cr=t%10;
temp=(lnk *)malloc(sizeof(lnk));
temp->val=cr;
temp->next=h3;
h3=temp;
t=t/10;
h1=h1->next;
h2=h2->next;
}
if(h1!=NULL && h2==NULL)
{
while(h1!=NULL)
{
t=h1->val+t;
cr=t%10;
temp=(lnk *)malloc(sizeof(lnk));
temp->val=cr;
temp->next=h3;
h3=temp;
t=t/10;
h1=h1->next;
}
}
if(h2!=NULL && h1==NULL)
{
while(h2!=NULL)
{
t=h2->val+t;
cr=t%10;
temp=(lnk *)malloc(sizeof(lnk));
temp->val=cr;
temp->next=h3;
h3=temp;
t=t/10;
h2=h2->next;
}
}
return h3;
}


void disp(lnk *h)
{
if(h==NULL)
return;
else
{
printf("%d",h->val);
disp(h->next);
}
}


I/O : Enter the first large number : 123456789

Enter the second large number : 987654321

Resultant number : 1111111110

Comments

Popular posts from this blog

JAVA program to add two distance

Print Pattern using C