使用栈将一个很长的十进制数转为二进制,C语言实现
时间: 2024-12-19 13:25:24 浏览: 2
在C语言中,我们可以使用栈数据结构和循环来将长整型的十进制数转换成二进制数。这里是一个简单的示例,我们首先创建一个栈来存储二进制位,然后逐个取出十进制数的每一位进行转换:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈结构体
typedef struct {
int top; // 栈顶元素的位置
int capacity; // 栈的最大容量
unsigned char data[100]; // 存放二进制位
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
s->capacity = sizeof(s->data);
}
// 判断栈是否已满
int is_full(Stack *s) {
return (s->top == s->capacity - 1);
}
// 将元素压入栈
void push(Stack *s, unsigned char num) {
if (!is_full(s)) {
s->data[++s->top] = num;
} else {
printf("Stack overflow.\n");
}
}
// 从栈顶弹出并返回元素
unsigned char pop(Stack *s) {
if (s->top != -1) {
return s->data[s->top--];
} else {
printf("Stack underflow.\n");
return 0;
}
}
// 主函数:十进制转二进制
void decimal_to_binary(long long num, Stack *s) {
while (num > 0) {
unsigned char remainder = (unsigned char)(num % 2);
push(s, remainder);
num /= 2;
}
// 反转栈,因为我们在遍历时是从低位到高位插入的
for(int i = 0; i < s->top; i++) {
unsigned char temp = pop(s);
push(s, temp);
}
}
// 打印栈中的二进制数
void print_stack(Stack *s) {
printf("Binary representation: ");
for(int i = s->top; i >= 0; i--) {
printf("%d", s->data[i]);
}
printf("\n");
}
int main() {
Stack binaryStack;
init(&binaryStack);
long long decimalNum = 123456789; // 需要转换的十进制数
decimal_to_binary(decimalNum, &binaryStack);
print_stack(&binaryStack);
return 0;
}
```
运行上述程序,它会将给定的十进制数 `decimalNum` 转换成二进制,并打印结果。
阅读全文