使用栈将一个很长(>30)的十进制数转换为二进制数。输入格式 若干个很长的十进制数 每行一个。c语言
时间: 2024-11-18 12:27:34 浏览: 40
在C语言中,可以使用栈数据结构以及一些基本的算术操作来实现长整数的十进制转二进制。这里提供一种简单的分治策略,你可以通过循环处理每个数字并将其转换为二进制形式:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// 定义栈结构体
typedef struct {
int* data;
int top;
int size;
} Stack;
// 初始化栈
Stack initStack() {
Stack s;
s.data = (int*)malloc(sizeof(int) * 50); // 预估最大长度为30位,预留余量
s.top = -1;
s.size = 0;
return s;
}
// 入栈
void push(Stack* s, int value) {
if (s->top == s->size - 1) {
s->data = (int*)realloc(s->data, sizeof(int) * (s->size * 2));
}
s->data[++s->top] = value;
}
// 出栈
int pop(Stack* s) {
if (s->top == -1)
return -1; // 空栈
return s->data[s->top--];
}
// 将十进制数转换成二进制字符串
char* decimalToBinary(int num) {
Stack s = initStack();
while (num > 0) {
push(&s, num % 2);
num /= 2;
}
char* binary = (char*)malloc(1 + s.top * sizeof(char)); // 二进制每一位加上前导零
binary[0] = '0';
for (int i = 0; i < s.top; ++i) {
binary[i + 1] = (char)(push(&s, pop(&s)) + '0');
}
free(s.data); // 释放栈内存
return binary;
}
int main() {
int input;
printf("请输入一个很长的十进制数:\n");
scanf("%d", &input);
char* binary_str = decimalToBinary(input);
printf("转换后的二进制数是:%s\n", binary_str);
free(binary_str); // 释放字符串内存
return 0;
}
```
注意:这个程序假设了用户会连续输入一个接一个的十进制数。每次读取一个数后,你需要再次运行`main()`函数来处理下一个数。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)