c语言利用栈实现高精度整数求和
时间: 2023-09-03 17:07:23 浏览: 94
c语言用栈实现计算器功能
5星 · 资源好评率100%
以下是利用栈实现高精度整数求和的 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 1000
typedef struct Stack {
int data[MAX_SIZE];
int top;
} Stack;
void initStack(Stack *s) {
s->top = -1;
}
int isEmpty(Stack *s) {
return s->top == -1;
}
int isFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
void push(Stack *s, int x) {
if (isFull(s)) {
printf("Stack is full!\n");
exit(1);
}
s->data[++s->top] = x;
}
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty!\n");
exit(1);
}
return s->data[s->top--];
}
void sum(Stack *s1, Stack *s2, Stack *res) {
int carry = 0;
while (!isEmpty(s1) || !isEmpty(s2)) {
int a = isEmpty(s1) ? 0 : pop(s1);
int b = isEmpty(s2) ? 0 : pop(s2);
int c = a + b + carry;
carry = c / 10;
push(res, c % 10);
}
if (carry) {
push(res, carry);
}
}
int main() {
char str1[MAX_SIZE], str2[MAX_SIZE];
Stack s1, s2, res;
initStack(&s1);
initStack(&s2);
initStack(&res);
printf("Input two numbers:\n");
scanf("%s%s", str1, str2);
int len1 = strlen(str1);
int len2 = strlen(str2);
for (int i = 0; i < len1; i++) {
push(&s1, str1[i] - '0');
}
for (int i = 0; i < len2; i++) {
push(&s2, str2[i] - '0');
}
sum(&s1, &s2, &res);
printf("Result: ");
while (!isEmpty(&res)) {
printf("%d", pop(&res));
}
printf("\n");
return 0;
}
```
这里利用栈来存储两个高精度整数的每一位,然后从低位到高位依次进行加法运算,并将结果存放到另一个栈中。最后再从高位到低位依次输出结果栈中的每一位即可。
阅读全文