用c语言用栈写一个将十进制转换为二进制
时间: 2024-05-13 10:15:31 浏览: 116
好的,这里是用栈实现将十进制转换为二进制的C语言代码,主要是利用栈后进先出的特点,将余数一一入栈,最后出栈输出即可。
```c
#include <stdio.h>
#define MAX_SIZE 100
int stack[MAX_SIZE];
int top = -1;
// 入栈
void push(int num) {
top++;
stack[top] = num;
}
// 出栈
int pop() {
int num = stack[top];
top--;
return num;
}
// 判断栈是否为空
int is_empty() {
return top == -1;
}
int main() {
int num;
printf("请输入一个十进制数:");
scanf("%d", &num);
// 将余数入栈
while (num) {
push(num % 2);
num /= 2;
}
// 出栈并输出
printf("转换为二进制为:");
while (!is_empty()) {
printf("%d", pop());
}
return 0;
}
```
运行结果:
```
请输入一个十进制数:10
转换为二进制为:1010
```
相关问题
用c语言栈写一个二进制转换十进制的程序
好的,以下是一个用 C 语言栈实现二进制转换为十进制的程序:
```c
#include <stdio.h>
#define MAX_SIZE 100
// 栈的结构体定义
struct Stack {
int top;
int arr[MAX_SIZE];
};
// 初始化栈
void initStack(struct Stack *s) {
s->top = -1;
}
// 判断栈是否已满
int isFull(struct Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 判断栈是否为空
int isEmpty(struct Stack *s) {
return s->top == -1;
}
// 入栈操作
void push(struct Stack *s, int item) {
if (isFull(s)) {
printf("Stack is full\n");
return;
}
s->arr[++s->top] = item;
}
// 出栈操作
int pop(struct Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty\n");
return -1;
}
return s->arr[s->top--];
}
// 二进制转换为十进制
int binaryToDecimal(char binary[]) {
struct Stack s;
initStack(&s);
int i = 0, decimal = 0, power = 1;
// 将二进制数的每一位依次入栈
while (binary[i] != '\0') {
push(&s, binary[i] - '0');
i++;
}
// 依次出栈并计算十进制数
while (!isEmpty(&s)) {
decimal += pop(&s) * power;
power *= 2;
}
return decimal;
}
int main() {
char binary[MAX_SIZE];
printf("Enter a binary number: ");
scanf("%s", binary);
int decimal = binaryToDecimal(binary);
printf("Decimal equivalent of %s is %d\n", binary, decimal);
return 0;
}
```
程序通过栈的数据结构来实现二进制转换为十进制,`push` 函数用来入栈,`pop` 函数用来出栈,`binaryToDecimal` 函数用来将二进制数转换为十进制数。在 `main` 函数中,读取用户输入的二进制数,并调用 `binaryToDecimal` 函数来计算十进制数的值,最后输出结果。
C语言怎么利用栈来编写一个十进制转换为二进制的数制转换算法函数
在C语言中,你可以通过递归栈来实现一个十进制转二进制的算法,这种方法通常被称为“除2取余法”。以下是一个简单的函数示例:
```c
#include <stdio.h>
#include <string.h>
// 用于存储结果的栈结构体
typedef struct {
int bit; // 当前位的值,0 或 1
char stack[32]; // 存储二进制位的数组
int top; // 栈顶指针
} Stack;
// 初始化栈
void initStack(Stack *s) {
s->top = -1;
}
// 入栈操作
void push(Stack *s, int bit) {
if (s->top == sizeof(s->stack) - 1) {
printf("Stack overflow!\n");
return;
}
s->stack[++s->top] = bit + '0'; // 将0或1转换为字符并入栈
}
// 出栈操作
int pop(Stack *s) {
if (s->top == -1) {
printf("Stack underflow!\n");
return -1;
}
return s->stack[s->top--] - '0'; // 取出栈顶元素并转换回数字
}
// 十进制转二进制
char* decimalToBinary(int num) {
Stack binaryStack;
initStack(&binaryStack);
while (num > 0) {
push(&binaryStack, num % 2); // 取余数并入栈
num /= 2; // 整数除以2
}
// 构造最终字符串并返回
char* result = (char*)malloc(sizeof(binaryStack.stack) * sizeof(char) + 1);
result[binaryStack.top + 1] = '\0';
for (int i = binaryStack.top; i >= 0; i--) {
result[i] = binaryStack.stack[i];
}
return result;
}
int main() {
int decimal = 42;
char* binary = decimalToBinary(decimal);
printf("Decimal %d in binary is %s\n", decimal, binary);
free(binary);
return 0;
}
```
这个程序首先初始化一个栈,并通过循环将每个十进制数的二进制位压入栈中。然后从栈顶开始取出这些位并构造最终的二进制字符串。
阅读全文