建立一个整数栈,实现10进制整数转换为2进制整数的算法conversion,并测试。参考教材p48页的数制转换的伪码和我在学习通本课程“资料”中提供的表达式求值的代码evaluateExpress.c。
时间: 2024-10-21 18:01:30 浏览: 14
建立一个整数栈来实现10进制整数转换为2进制的过程可以分为以下几个步骤:
1. 初始化:创建一个空的栈,用于存放2进制数字的临时存储。
2. 算法实现:
- 输入一个10进制整数`num`。
- 当`num`大于0时,执行循环:
a. 取出`num`除以2的余数(这个余数就是当前的2进制位),压入栈中。
b. 更新`num`,将其更新为其整除2的结果,直到`num`变为0。
- 遍历栈,将所有元素拼接起来,得到的就是原整数的二进制表示。
下面是一个简单的C语言版本的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// Stack for binary digits
typedef struct {
int *items;
size_t top;
size_t capacity;
} Stack;
void push(Stack *s, int digit) {
if (s->top == s->capacity) {
s->capacity *= 2;
s->items = (int*) realloc(s->items, sizeof(int) * s->capacity);
}
s->items[s->top++] = digit;
}
int pop(Stack *s) {
return s->top > 0 ? s->items[--s->top] : -1; // Return -1 when empty
}
void convertToBinary(int num) {
Stack binaryStack;
binaryStack.items = malloc(sizeof(int));
binaryStack.top = binaryStack.capacity = 0;
while (num > 0) {
push(&binaryStack, num % 2);
num /= 2;
}
// Pop and print the stack elements in reverse order
printf("Binary representation: ");
while (!binaryStack.isEmpty()) {
printf("%d", pop(&binaryStack));
}
}
// Test function
int main() {
int decimalNum = 42; // Replace with any integer you want to convert
convertToBinary(decimalNum);
return 0;
}
```
阅读全文