数据结构12: 实践项目之进制转换器

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

转换器实例

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

提示:此进制转换器可以在 2-36 进制之间对数据进行任意转换。各进制中对应的数字如下表:

设计思路

当用户给定 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);
    }
}
运行结果:

进制转换器,请输入原数据的进制(2-36):10
请输入要转换的数据:100
请输入转换后的数据的进制:16
转换后的结果为:
64

原文地址:https://www.cnblogs.com/ciyeer/p/9031122.html

时间: 2024-10-10 19:38:53

数据结构12: 实践项目之进制转换器的相关文章

进制转换器

1 /* 2 进制转换器 3 P进制数x转为Q进制数z 4 过程模拟,先转十进制再转目标进制 5 */ 6 #include<cstdio> 7 #include<algorithm> 8 #include<stack> 9 using namespace std; 10 int main(){ 11 int p,q; 12 int x,y=0,z; 13 int a=1; 14 stack<int> sta; 15 scanf("%d%d%d&q

2~16进制间任意进制转换器

一.程序运行截图(仅列举部分) 正数: (1)10->8 (连续五次不输入程序会自动结束哦) (2)10->2 (3)16->10 (4)8->16  负数: (1)10->2 (2)10->2 (3)8->16  二.扩展功能 1.可以识别正负数并输出,当输出为二进制时会自动将其补为有符号位的八位或十六位. 2.能在2至16所有进制间任意转换: 3输入错误时会报错并让你重新输入: 4.加了一个没卵用的随机数来使最后一句话随机输出. 三.介绍函数及其使用的全局变量

数据结构实验之栈:进制转换

            数据结构实验之栈:进制转换 输入一个十进制整数,将其转换成对应的R(2<=R<=9)进制数,并输出. 输入 第一行输入需要转换的十进制数:第二行输入R. 输出 输出转换所得的R进制数. 模板: while(n!=0) { mod = n%r; q[i++] = mod;//i初始化为0 n/=r; }  

我学C#的第一天之进制转换器

两天的时间实现了一个功能——进制转换器 今天最大的收获就是如何在文本框中限制输入 如下: private void txtDecimal_KeyPress(object sender, KeyPressEventArgs e) { if ("1234567890".IndexOf(e.KeyChar) == -1 && e.KeyChar != 8) e.Handled = true; 这比在textBox文本中用Message.Show方便且没有bug.

【曾经】进制转换器C#

1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 namespace nu

使用qt写的进制转换器

没有使用什么数据结构,直接使用qt自带的进制转换函数, 实时出结果,代码在后面的链接中,由于初学qt,好多不会,代码构造就有点乱 截图如下 代码 http://pan.baidu.com/s/1Ppwxo

第15周【项目2-二进制文件浏览器】

问题描述: (1)做一个类似BinaryViewer的查看二进制文件的程序,输入文件名后,可以以16进制和ASCII对照的方式列出该文件的内容,可以参考下图: 提示:循环中,一次读入16个字节,先用16进制形式输出,再用字符形式输出. 代码实现: #include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> #include <fstream> #inclu

我写的第三个程序(进制转换器)

填写你需要转换的数值,然后填写数值的进制,就可以转换成十进制的数值: a=input('请输入数值:') b=int(input('请输入进制:')) c=int(a,base=b) print(c) 原文地址:https://www.cnblogs.com/shengbei/p/8848353.html

进制转换器beta 1

一.运行截图 二.拓展功能 检测进制数是否错误,若输错后无需返回菜单重新进行选择进制转换选项,可直接重新输入所需要转换的进制数 三.函数&功能 1.menu函数 void menu() //菜单 { printf(" \\ 我是菜单 / \n"); printf(" (?ì _ í?) \n"); printf(" ——————十进制转换二进制 [1]—————— \n"); printf(" \\ 十进制转换八进制 [2] /