数据结构之进制转换器实现

简介: 数据结构之进制转换器实现

进制转换器项目要求:用户提供需要转换的数据和该数据的进制,以及要转换的进制,进制转换器提供给用户最终的正确转换的结果。



转换器实例



例如,用户提供了一个十进制数:10,要求将此数据以二进制形式转换,则通过进制转换器转换的最终结果应该:1010。



提示:此进制转换器可以在


2-36 进制之间对数据进行任意转换。各进制中对应的数字如下表:


image.png



设计思路

当用户给定 2 - 36 进制中的任意一进制数时,最简单的方法是使用顺序存储结构进行存储,即使用字符串数组存储。



转化时,最直接的思路就是先将该数转化为十进制数据,然后再由十进制转化成要求的进制数,最终的结果用栈结构存储(先进后出),这样最终显示

给用户的是正常的数据。


实现代码

#include <stdio.h>
#include <string.h>
#include <math.h>
int top=-1;//top 变量时刻表示栈顶元素所在位置
void push(char * a,char elem){
  a[++top]=elem;
}
void pop(char * a){
  if (top==-1) {
    return ;
  }
  //输出时要按照正确的格式显示给用户
  if (a[top]>=10) {
    printf("%c",a[top]+55);
  }else{
    printf("%d",a[top]);
  }
  top--;
}
//将各进制数转换成十进制数
int scaleFun(char * data,int system){
  int k=(int)strlen(data)-1;
  int system_10_data=0;
  int i;
  for (i=k; i>=0; i--) {
    int temp;
    if (data[i]>=48 && data[i]<=57) {
      temp=data[i]-48;
    }else{
      temp=data[i]-55;
    }
    system_10_data+=temp*pow(system, k-i);
  }
  return system_10_data;
}
int main() {
  char data[100];
  printf("进制转换器,请输入原数据的进制(2-36):");
  int system;
  scanf("%d",&system);
  getchar();
  printf("请输入要转换的数据:");
  scanf("%s",data);
  getchar();
  int system_10_data=scaleFun(data, system);
  printf("请输入转换后的数据的进制:");
  int newSystem;
  scanf("%d",&newSystem);
  getchar();
  while (system_10_data/newSystem) {
    push(data,system_10_data%newSystem );
    system_10_data/=newSystem;
  }
  push(data,system_10_data%newSystem);
  printf("转换后的结果为:\n");
  while (top!=-1) {
    pop(data);
  }
}
相关文章
|
存储 Java
数据结构单链表SingleLinkedList,Java实现单链表增删改查
数据结构单链表SingleLinkedList,Java实现单链表增删改查
157 1
数据结构单链表SingleLinkedList,Java实现单链表增删改查
|
存储 算法 程序员
【数据结构】链式二叉树的实现(一)
【数据结构】链式二叉树的实现(一)
135 0
【数据结构】链式二叉树的实现(一)
【数据结构】堆(一)——堆的实现(二)
【数据结构】堆(一)——堆的实现(二)
133 0
【数据结构】堆(一)——堆的实现(二)
|
存储 程序员
【数据结构】堆(一)——堆的实现(一)
【数据结构】堆(一)——堆的实现(一)
136 0
【数据结构】堆(一)——堆的实现(一)
|
程序员
【数据结构】栈的实现
【数据结构】栈的实现
165 0
【数据结构】栈的实现
【数据结构】单链表 — 纯C实现单链表
【数据结构】单链表 — 纯C实现单链表
【数据结构】单链表 — 纯C实现单链表
【数据结构】顺序表—纯C实现顺序表
【数据结构】顺序表—纯C实现顺序表
【数据结构】顺序表—纯C实现顺序表
|
C语言
【数据结构】C语言版本的带哨兵位双向循环链表的快速实现方法
我们在之前学双向带头循环链表时,结尾部分简单讲解了快速实现的方法。本篇博客将详细讲解如何迅速实现,通过思路草图的方法轻松写出带头双向循环链表,甚至都可以直接用注释画草图。本篇博客是对 "从零开始逐步实现带哨兵位循环双向链表" 的补充,之前在写那篇博客的时候不小心忘记实现销毁接口了,这里正好能进行一个补充。
184 0
【数据结构】C语言版本的带哨兵位双向循环链表的快速实现方法
|
存储 算法 PHP
【数据结构】堆的概念 | 从零开始实现数组堆
我们之前似乎确凿在C语言教学里讲过堆,但是那是操作系统中的堆,我们今天将要讲的堆是数据结构里的堆。数据结构中也有栈和堆,它跟操作系统对内存划分中的栈和堆没有关系。我横竖卷不动其他人,于是就打算再更亿篇博客罢。
272 0
【数据结构】堆的概念 | 从零开始实现数组堆
【数据结构】队列的基本概念 | 从零开始实现队列 | 利用思路草图将思路转变为代码
本章我们将学习 &quot;队列&quot; ,首先介绍队列的概念和结构,然后我们将着重讲解栈的实现。我们从零开始写队列的接口,并从零开始步步解读。本章将继续巩固画思路草图的能力,只要思路草图画好了,就可以很轻松地将其转换成代码。
147 0
【数据结构】队列的基本概念 | 从零开始实现队列 | 利用思路草图将思路转变为代码