82 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| // Write a program to implement addition of two long positive integer numbers using doubly linked list.
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| 
 | |
| #define MAX_DIGITS 100
 | |
| 
 | |
| typedef struct node {
 | |
|     int digit;
 | |
|     struct node *left;
 | |
|     struct node *right;
 | |
| } Node;
 | |
| 
 | |
| Node* createNode(int digit) {
 | |
|     Node* newNode = (Node*)malloc(sizeof(Node));
 | |
|     newNode->digit = digit;
 | |
|     newNode->left = NULL;
 | |
|     newNode->right = NULL;
 | |
|     return newNode;
 | |
| }
 | |
| 
 | |
| void insertDigit(Node** head, int digit) {
 | |
|     Node* newNode = createNode(digit);
 | |
|     if (*head == NULL) {
 | |
|         *head = newNode;
 | |
|     } else {
 | |
|         newNode->right = *head;
 | |
|         (*head)->left = newNode;
 | |
|         *head = newNode;
 | |
|     }
 | |
| }
 | |
| 
 | |
| void addNumbers(Node* num1, Node* num2, Node** result) {
 | |
|     int carry = 0, sum;
 | |
|     Node *ptr1 = num1, *ptr2 = num2;
 | |
| 
 | |
|     while (ptr1 || ptr2 || carry) {
 | |
|         sum = carry;
 | |
|         if (ptr1) {
 | |
|             sum += ptr1->digit;
 | |
|             ptr1 = ptr1->right;
 | |
|         }
 | |
|         if (ptr2) {
 | |
|             sum += ptr2->digit;
 | |
|             ptr2 = ptr2->right;
 | |
|         }
 | |
|         insertDigit(result, sum % 10);
 | |
|         carry = sum / 10;
 | |
|     }
 | |
| }
 | |
| 
 | |
| void printNumber(Node* head) {
 | |
|     if (head == NULL) return;
 | |
|     printNumber(head->right);
 | |
|     printf("%d", head->digit);
 | |
| }
 | |
| 
 | |
| int main() {
 | |
|     Node *num1 = NULL, *num2 = NULL, *result = NULL;
 | |
|     char str[MAX_DIGITS];
 | |
|     int i;
 | |
| 
 | |
|     printf("Enter first number: ");
 | |
|     scanf("%s", str);
 | |
|     for (i = 0; str[i] != '\0'; i++) {
 | |
|         insertDigit(&num1, str[i] - '0');
 | |
|     }
 | |
| 
 | |
|     printf("Enter second number: ");
 | |
|     scanf("%s", str);
 | |
|     for (i = 0; str[i] != '\0'; i++) {
 | |
|         insertDigit(&num2, str[i] - '0');
 | |
|     }
 | |
| 
 | |
|     addNumbers(num1, num2, &result);
 | |
| 
 | |
|     printf("Sum: ");
 | |
|     printNumber(result);
 | |
|     printf("\n");
 | |
| 
 | |
|     return 0;
 | |
| }
 | 
