#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node, *NodePtr;
void push(NodePtr *top, int data) {
NodePtr newNode = (NodePtr)malloc(sizeof(Node));
if (!newNode) {
printf("内存分配失败\n");
return;
}
newNode->data = data;
newNode->next = *top;
*top = newNode;
}
int pop(NodePtr *top) {
if (*top == NULL) {
printf("栈已空\n");
return -1;
}
int data = (*top)->data;
NodePtr temp = *top;
*top = (*top)->next;
free(temp);
return data;
}
void initStack(NodePtr *top) {
*top = NULL;
}
// 二进制
void decimalToBinary2(int n) {
NodePtr stackTop;
initStack(&stackTop);
if (n == 0){
printf("对应的二进制数为:");
printf("0\n");
}
else {
while (n > 0) {
push(&stackTop, n % 2);
n = n / 2;
}
printf("对应的二进制数为:");
while (stackTop != NULL) {
printf("%d", pop(&stackTop));
}
printf("\n");
}
}
// 八进制
void decimalToBinary8(int n) {
NodePtr stackTop;
initStack(&stackTop);
if (n == 0){
printf("对应的二进制数为:");
printf("0\n");
}
else {
while (n > 0) {
push(&stackTop, n % 8);
n = n / 8;
}
printf("对应的8进制数为:");
while (stackTop != NULL) {
printf("%d", pop(&stackTop));
}
printf("\n");
}
}
// 十六进制
void decimalToBinary16(int n) {
NodePtr stackTop;
initStack(&stackTop);
if (n == 0){
printf("对应的十六进制数为:");
printf("0\n");
}
else {
while (n > 0) {
push(&stackTop, n % 16);
n = n / 16;
}
printf("对应的十六进制数为:");
while (stackTop != NULL) {
if (stackTop -> data == 10)
{
printf("A");
pop(&stackTop);
}
else if (stackTop -> data == 11)
{
printf("B");
pop(&stackTop);
}
else if (stackTop -> data == 12)
{
printf("C");
pop(&stackTop);
}
else if (stackTop -> data == 13)
{
printf("D");
pop(&stackTop);
}
else if (stackTop -> data == 14)
{
printf("E");
pop(&stackTop);
}
else if (stackTop -> data == 15)
{
printf("F");
pop(&stackTop);
}
else
{
printf("%d", pop(&stackTop));
}
}
printf("\n");
}
}
int main() {
int decimalNum;
int n;
int flag = 1;
while (flag)
{
printf ("1:二进制\n");
printf ("2:八进制\n");
printf ("3:十六进制\n");
printf ("4:退出\n");
printf ("请选择:");
scanf("%d", &n);
switch (n)
{
case 1:
// 输入要转换的十进制数
printf("请输入一个十进制数:");
scanf("%d", &decimalNum);
decimalToBinary2(decimalNum);
printf("\n");
break;
case 2:
// 输入要转换的十进制数
printf("请输入一个十进制数:");
scanf("%d", &decimalNum);
decimalToBinary8(decimalNum);
printf("\n");
break;
case 3:
// 输入要转换的十进制数
printf("请输入一个十进制数:");
scanf("%d", &decimalNum);
decimalToBinary16(decimalNum);
printf("\n");
break;
case 4:
flag = 0;
break;
default :
printf("输入错误,重新输入\n");
printf("\n");
}
}
return 0;
}
06-27
1万+