用c语言编写一个把十进制正整数分别转换为二、八、十六进制数输出的函数
时间: 2024-11-29 17:36:59 浏览: 14
在C语言中,你可以创建一个函数来实现这个功能,让用户选择转换类型并输入十进制数。以下是一个简单的示例:
```c
#include <stdio.h>
#include <string.h>
// 定义栈结构体
typedef struct {
int data[100]; // 假设最多存储100个元素
int top;
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 入栈操作
void push(Stack *s, int num) {
if (s->top < 99) {
s->data[++s->top] = num;
} else {
printf("Stack overflow!\n");
}
}
// 出栈操作(这里仅用于展示转换过程)
int pop(Stack *s) {
return s->data[s->top--];
}
// 十进制转其他进制的辅助函数
char* convert(int base, int num) {
char result[100];
sprintf(result, "%o", num); // 对于八进制
// 或者 sprintf(result, "%x", num); // 对于十六进制
return result;
}
// 主函数
void decimal_to_other_bases() {
Stack stack;
init(&stack);
printf("请选择转换类型:1:十进制->二进制 2:十进制->八进制 3:十进制->十六进制 \n");
int choice;
scanf("%d", &choice);
int decimal_num;
printf("请输入十进制数: ");
scanf("%d", &decimal_num);
switch (choice) {
case 1: // 转换成二进制
while (decimal_num > 0) {
push(&stack, decimal_num % 2);
decimal_num /= 2;
}
printf("二进制: %s\n", convert(2, pop(&stack)));
break;
case 2: // 转换成八进制
while (decimal_num > 0) {
push(&stack, decimal_num % 8);
decimal_num /= 8;
}
printf("八进制: %s\n", convert(8, pop(&stack)));
break;
case 3: // 转换成十六进制
while (decimal_num > 0) {
push(&stack, decimal_num % 16);
decimal_num /= 16;
}
printf("十六进制: %s\n", convert(16, pop(&stack)));
break;
default:
printf("Invalid choice.\n");
break;
}
// 清理栈
while (stack.top != -1) {
pop(&stack);
}
}
int main() {
decimal_to_other_bases();
return 0;
}
```
这段代码定义了一个栈来存储十进制转换过程中产生的中间结果,并根据用户的输入选择相应的方法进行转换。注意实际应用中可能需要考虑更多的边界条件和错误处理。
阅读全文