#include<stdio.h>
#include<conio.h>
#include<malloc.h>
struct list
{
int num;
struct list *next;
};
typedef struct list node;
void main()
{
node* getnum(void);
node* add(node*,node*);
node* rev_num(node*);
void putnum(node*);
node
*num1=NULL,*num2=NULL,*sum=NULL;
clrscr();
printf("Enter any number :
");
num1=getnum();
printf("Enter another
number : ");
pum2=getnum();
putnum(num1);
printf(" + ");
putnum(num2);
printf(" = ");
sum=add(num1,num2);
putnum(sum);
getch();
}
node* getnum(void)
{
char *str;
node
*head=NULL,*temp;
gets(str);
while(*str!='\0')
{
if(head==NULL)
{
head=(node*)malloc(sizeof(node));
head->num=(*str)-'0';
head->next=NULL;
temp=head;
}
else
{
temp->next=(node*)malloc(sizeof(node));
temp->next->num=(*str)-'0';
temp->next->next=NULL;
temp=temp->next;
}
str++;
}
printf("\n");
return head;
}
void putnum(node *num)
{
node
*temp=num;
while(temp)
{
printf("%d",temp->num);
temp=temp->next;
}
}
node* rev_num(node *num)
{
node
*temp=num,*nxt,*prev=NULL;
while(temp!=NULL)
{
nxt=temp->next;
temp->next=prev;
prev=temp;
temp=nxt;
}
num=prev;
return num;
}
node* add(node *num1,node *num2)
{
int carry=0;
node
*sum=NULL,*temp;
num1=rev_num(num1);
num2=rev_num(num2);
while(num1!=NULL||num2!=NULL)
{
if(sum==NULL)
{
sum=(node*)malloc(sizeof(node));
if(num1==NULL) sum->num=num2->num+carry;
else
if(num2==NULL) sum->num=num1->num+carry;
else
sum->num=num1->num+num2->num+carry;
if(sum->num>=10)
{
sum->num%=10;
carry=1;
}
else
carry =0;
sum->next=NULL;
temp=sum;
}
else
{
temp->next=(node*)malloc(sizeof(node));
if(num1==NULL) temp->next->num=num2->num+carry;
else
if(num2==NULL) temp->next->num=num1->num+carry;
else
temp->next->num=num1->num+num2->num+carry;
if(temp->next->num>=10)
{
temp->next->num%=10;
carry=1;
}
else
carry=0;
temp=temp->next;
temp->next=NULL;
}
if(num1==NULL) num2=num2->next;
else
if(num2==NULL) num1=num1->next;
else
{
num1=num1->next;
num2=num2->next;
}
}
if(carry)
{
temp->next=(node*)malloc(sizeof(node));
temp->next->num=carry;
temp=temp->next;
temp->next=NULL;
}
return sum=rev_num(sum);
}
Output :