#include #include #include /* Structure d'un nœud de la liste chaînée */ typedef struct Node { int digit; struct Node *next; } Node; /* Fonction pour ajouter un chiffre à la fin de la liste chaînée */ Node* ajouter_chiffre(Node *head, int digit) { Node *new_node = (Node*)malloc(sizeof(Node)); if (new_node == NULL) { fprintf(stderr, "Erreur d'allocation memoire\n"); exit(EXIT_FAILURE); } new_node->digit = digit; new_node->next = NULL; if (head == NULL) { return new_node; } Node *temp = head; while (temp->next != NULL) { temp = temp->next; } temp->next = new_node; return head; } /* Fonction pour convertir une chaîne en liste chaînée */ Node* convertir_en_liste(const char *nombre) { Node *head = NULL; int i; for (i = 0; nombre[i] != '\0'; i++) { head = ajouter_chiffre(head, nombre[i] - '0'); } return head; } /* Fonction pour afficher la liste chaînée */ void afficher_liste(Node *head) { while (head != NULL) { printf("%d", head->digit); head = head->next; } } /* Fonction pour additionner deux listes chaînées */ Node* additionner_listes(Node *l1, Node *l2) { Node *resultat = NULL; int retenue = 0; while (l1 != NULL || l2 != NULL || retenue) { int somme = retenue; if (l1 != NULL) { somme += l1->digit; l1 = l1->next; } if (l2 != NULL) { somme += l2->digit; l2 = l2->next; } resultat = ajouter_chiffre(resultat, somme % 10); retenue = somme / 10; } return resultat; } /* Fonction principale */ int main(int argc, char *argv[]) { Node *num1; Node *num2; Node *somme; if (argc != 3) { fprintf(stderr, "Usage: %s nombre1 nombre2\n", argv[0]); return EXIT_FAILURE; } num1 = convertir_en_liste(argv[1]); num2 = convertir_en_liste(argv[2]); somme = additionner_listes(num1, num2); afficher_liste(somme); printf("\n"); return EXIT_SUCCESS; }