-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstack-add-large-number.c
110 lines (93 loc) · 2.03 KB
/
stack-add-large-number.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*
Description
Để làm cộng các số vô cùng lớn (có thể có đến 100 chữ số) người ta xử lí số như là một chuỗi chứa các
kí tự trong phạm vi từ '0' đến '9'). Hãy viết chương trình cộng hai số vô cùng lớn sử dụng stack. Kết quả hiển thị ra màn hình
Input:
123
456
Output:
579
Input:
456
98
Output:
554
*/
#include <stdio.h>
#include <string.h>
#define MAX 101
// Stack structure
typedef struct {
int top;
int array[MAX];
} Stack;
// Function to initialize stack
void initStack(Stack* s)
{
s->top = -1;
}
// Check if the stack is empty
int isEmpty(Stack* s)
{
return s->top == -1;
}
// Check if the stack is full
int isFull(Stack* s)
{
return s->top == MAX - 1;
}
// Function to push an element to stack
void push(Stack* s, int item)
{
if (isFull(s))
return;
s->array[++s->top] = item;
}
// Function to pop an element from stack
int pop(Stack* s)
{
if (isEmpty(s))
return -1;
return s->array[s->top--];
}
// Function to add two numbers using stack
void addLargeNumbers(char* num1, char* num2)
{
Stack s1, s2, result;
initStack(&s1);
initStack(&s2);
initStack(&result);
// Push digits of first number to stack
for (int i = 0; i < strlen(num1); i++) {
push(&s1, num1[i] - '0');
}
// Push digits of second number to stack
for (int i = 0; i < strlen(num2); i++) {
push(&s2, num2[i] - '0');
}
int carry = 0;
while (!isEmpty(&s1) || !isEmpty(&s2) || carry > 0) {
int sum = carry;
if (!isEmpty(&s1))
sum += pop(&s1);
if (!isEmpty(&s2))
sum += pop(&s2);
push(&result, sum % 10);
carry = sum / 10;
}
// Print result
while (!isEmpty(&result)) {
printf("%d", pop(&result));
}
printf("\n");
}
int main()
{
char num1[MAX], num2[MAX];
// Read input numbers as strings
scanf("%s", num1);
scanf("%s", num2);
// Add the numbers
addLargeNumbers(num1, num2);
return 0;
}