C语言利用栈实现十进制转二
时间: 2024-08-17 20:02:08 浏览: 30
C语言可以利用栈来实现十进制数转换成二进制数的过程,也称为整数除2取余法。这个过程通常分为以下几个步骤:
1. 初始化:创建一个空栈,并设置一个变量(通常是数组或链表)来保存二进制位。
2. 将十进制数不断右移,直到它变为0。每次右移相当于除以2,取余的结果就是下一个二进制位。
3. 对于每次取余的结果(可能是0到9),将其对应的二进制值(0对应0,1对应1,以此类推)压入栈中。
4. 当十进制数变成0后,栈顶的元素即为最高位的二进制数字,依次出栈就是完整的二进制数。
举个例子,假设我们要将十进制数27转为二进制:
```c
int decimal = 27;
int binary[32]; // 假设我们预估最多需要32位
int index = 0; // 用于追踪栈内元素的位置
while (decimal > 0) {
binary[index] = decimal % 2;
decimal /= 2;
index++;
}
// 现在binary数组从低到高存储了二进制结果,如果index小于32,说明不需要那么长,所以截断即可
```
相关问题
C语言利用栈实现十进制转换二进制、八进制、十六进制的代码
以下是C语言利用栈实现十进制转换二进制、八进制、十六进制的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int top;
int capacity;
char* array;
} Stack;
Stack* createStack(int capacity) {
Stack* stack = (Stack*)malloc(sizeof(Stack));
stack->top = -1;
stack->capacity = capacity;
stack->array = (char*)malloc(capacity * sizeof(char));
return stack;
}
int isFull(Stack* stack) {
return stack->top == stack->capacity - 1;
}
int isEmpty(Stack* stack) {
return stack->top == -1;
}
void push(Stack* stack, char item) {
if (isFull(stack)) {
printf("Stack is full\n");
}
else {
stack->array[++stack->top] = item;
}
}
char pop(Stack* stack) {
if (isEmpty(stack)) {
printf("Stack is empty\n");
return 0;
}
else {
return stack->array[stack->top--];
}
}
char peek(Stack* stack) {
if (isEmpty(stack)) {
printf("Stack is empty\n");
return 0;
}
else {
return stack->array[stack->top];
}
}
void convertDecimalToBinary(int decimal) {
Stack* stack = createStack(100);
while (decimal > 0) {
int rem = decimal % 2;
push(stack, rem + '0');
decimal /= 2;
}
printf("Binary: ");
while (!isEmpty(stack)) {
printf("%c", pop(stack));
}
printf("\n");
free(stack->array);
free(stack);
}
void convertDecimalToOctal(int decimal) {
Stack* stack = createStack(100);
while (decimal > 0) {
int rem = decimal % 8;
push(stack, rem + '0');
decimal /= 8;
}
printf("Octal: ");
while (!isEmpty(stack)) {
printf("%c", pop(stack));
}
printf("\n");
free(stack->array);
free(stack);
}
void convertDecimalToHexadecimal(int decimal) {
Stack* stack = createStack(100);
while (decimal > 0) {
int rem = decimal % 16;
if (rem < 10) {
push(stack, rem + '0');
}
else {
push(stack, rem - 10 + 'A');
}
decimal /= 16;
}
printf("Hexadecimal: ");
while (!isEmpty(stack)) {
printf("%c", pop(stack));
}
printf("\n");
free(stack->array);
free(stack);
}
int main() {
int decimal;
printf("Enter a decimal number: ");
scanf("%d", &decimal);
convertDecimalToBinary(decimal);
convertDecimalToOctal(decimal);
convertDecimalToHexadecimal(decimal);
return 0;
}
```
在这个程序中,我们使用了一个`Stack`结构体,用于存储转换后的数字。`createStack`函数用于创建一个栈,`isFull`函数用于检查栈是否已满,`isEmpty`函数用于检查栈是否为空,`push`函数用于向栈中添加元素,`pop`函数用于从栈中弹出元素,`peek`函数用于查看栈顶元素。`convertDecimalToBinary`函数、`convertDecimalToOctal`函数和`convertDecimalToHexadecimal`函数分别用于将十进制数字转换为二进制、八进制和十六进制数字,并将结果输出到控制台上。
在`main`函数中,我们首先获取用户输入的十进制数字,然后调用上述三个函数分别将其转换为二进制、八进制和十六进制数字。
C语言利用栈实现十进制转换成其他进制的代码
以下是C语言利用栈实现十进制转换成其他进制的代码,以转换成二进制为例:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 100
typedef struct {
int top;
int data[MAX_STACK_SIZE];
} Stack;
void initStack(Stack *s) {
s->top = -1;
}
void push(Stack *s, int value) {
if (s->top < MAX_STACK_SIZE - 1) {
s->data[++s->top] = value;
} else {
printf("Stack is full.\n");
}
}
int pop(Stack *s) {
if (s->top >= 0) {
return s->data[s->top--];
} else {
printf("Stack is empty.\n");
return -1;
}
}
int isEmpty(Stack *s) {
return s->top == -1;
}
void convertDecimalToBinary(int decimal) {
Stack s;
initStack(&s);
while (decimal > 0) {
push(&s, decimal % 2);
decimal /= 2;
}
printf("Binary: ");
while (!isEmpty(&s)) {
printf("%d", pop(&s));
}
printf("\n");
}
int main() {
int decimal;
printf("Enter a decimal number: ");
scanf("%d", &decimal);
convertDecimalToBinary(decimal);
return 0;
}
```
解释:
首先定义了一个栈的结构体,包含栈顶指针和数据数组。然后定义了栈的初始化、入栈、出栈、判空等基本操作。
接下来定义了一个函数`convertDecimalToBinary`,用于将十进制数转换成二进制数。该函数创建了一个栈`s`,然后使用循环将十进制数的每一位转换成二进制数并入栈。最后,从栈顶开始依次出栈并打印到控制台。
在`main`函数中,首先读入用户输入的十进制数,然后调用`convertDecimalToBinary`函数将其转换成二进制数并打印到控制台。
你可以根据需要修改代码来实现将十进制数转换成其他进制数。