C语言怎么利用栈来编写一个十进制转换为二进制的数制转换算法函数
时间: 2024-10-22 18:04:52 浏览: 23
在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;
}
```
这个程序首先初始化一个栈,并通过循环将每个十进制数的二进制位压入栈中。然后从栈顶开始取出这些位并构造最终的二进制字符串。
阅读全文