C语言实现十进制数到其他进制的转换

创作灵感: 进制转换是计算机科学中的重要概念之一,了解如何将十进制数转换为其他进制(如二进制、八进制、十六进制)对于程序员来说至关重要。本文将介绍一个用C语言编写的程序,演示如何将用户输入的十进制数转换为不同进制的形式。通过这个程序,我们可以学习如何使用栈数据结构和循环来实现进制转换。

技术笔记要点: 在这个C语言程序中,我们首先定义了一个栈数据结构SqStack,用于存储转换过程中的中间结果。SqStack包含一个整数数组data和一个top指针,用于操作栈的初始化、压栈和弹栈等操作。

主要函数和步骤如下:

  1. InitStack函数用于初始化栈,将top指针设置为-1,表示栈为空。
  2. Push函数用于将元素压入栈中,检查栈是否已满,如果满则返回-1,否则将元素加入栈中。
  3. Pop函数用于从栈中弹出元素,检查栈是否为空,如果为空则返回-1,否则将栈顶元素弹出并传递给调用者。
  4. StackEmpty函数用于检查栈是否为空,返回1表示栈为空,返回0表示栈不为空。

然后,我们定义了conversion函数,用于进行十进制到其他进制的转换。该函数使用栈来保存转换过程中的余数,然后反向输出,以得到正确的进制表示。在转换过程中,如果目标进制是16进制且余数大于9,将使用字母A到F来表示。

最后,在main函数中,我们获取用户输入的十进制数,并调用conversion函数来分别转换为二进制、八进制和十六进制,并输出结果。

#include <stdio.h>

#define MAX_SIZE 100
typedef int ElemType;
typedef struct {
    ElemType data[MAX_SIZE];
    int top;
} SqStack;

void InitStack(SqStack *S) {
    S->top = -1;
}

int Push(SqStack *S, ElemType e) {
  if (S->top == MAX_SIZE - 1) {
    return -1;
  }
  S->data[++(S->top)] = e;
  return 0;
}

int Pop(SqStack *S, ElemType *e) {
  if (S->top == -1) {
    return -1;
  }
  *e = S->data[(S->top)--];
  return 0;
}

int StackEmpty(SqStack *S) {
  return S->top == -1;
}

// 十进制数到其他数制的转换函数
void conversion(int Num, int base) {
  ElemType e;
  SqStack S;
  InitStack(&S);

  while (Num) {
    Push(&S, Num % base);
    Num = Num / base;
  }
  while (!StackEmpty(&S)) {
    Pop(&S, &e);
    if (base == 16 && e > 9) {
      printf("%c", 'A' + e - 10);
    } else {
      printf("%d", e);
    }
  }
  printf("\n");
}

// 测试转换函数
int main() {
  int num;

  printf("请输入一个十进制数: ");
  scanf("%d", &num); // 获取用户输入的十进制数

  printf("数字%d的二进制形式是: ", num);
  conversion(num, 2);
  printf("数字%d的八进制形式是: ", num);
  conversion(num, 8);
  printf("数字%d的十六进制形式是: ", num);
  conversion(num, 16);

  return 0;
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值