用‘栈’的思想编写一个十进制转换二进制、八进制或十六进制的程序

根据进制转换方法,如十进制向二进制转换,将转换的十进制整数除以二进制基数(2),得到余数和商,如果商不为0,该商继续做被除数,除以基数,得到余数和商,此过程一直进行,直到得到的商为0时停止,此时得到的所有余数逆序排列就是转换得到的二进制数。十进制转换其他进制(八、十六)方法和当前方法相同,故可以扩展得到十进制向二、八、十六进制转换的统一算法。由于十进制数转换其他进制数时符合栈的特点“先进后出”,即先得到的余数是低位,后得到的余数是高位,因此这里利用栈做工具,保存转换过程中得到的余数。这里的栈需要自己定义,可以定义顺序栈,也可以定义链栈。可以将栈的定义及其基本操作放在一个头文件中,如果哪个程序需要就可以包含该头文件,而不需要每次都重新编写栈的代码。

首先运用顺序栈

头文件
#include #define MAX 100typedef int SElemType;typedef struct{ SElemType   base[MAX];   // 栈底指针 int  top;                // 栈顶指针                          //当前已分配的存储空间,以元素为单位。}SqStack;bool InitStack( SqStack &s ){        // 初始化顺序栈, 构造一个空栈 s.top =-1; return true;}// InitStackbool Push(SqStack &s,SElemType e){        //把元素e入栈   if( s.top ==MAX-1)     // 若栈满,返回false       return false;    s.top++;  s.base[s.top]= e;  return true;     }// Pushbool Pop( SqStack &s, SElemType &e ){        // 出栈 if( s.top == -1)     // 空吗?   return false; e = s.base[s.top];  s.top --; return true;}// Popbool StackEmpty(SqStack s){        //判栈空   return(s.top==-1);}

主程序

#include #include"shujujiegou_shunxuzhan.h"void conversion (int N,int B) {     SqStack S;    int temp,x;    InitStack(S); // 构造空栈    while (N)  {           temp=N%B;   Push(S,temp);   N=N/B; } while (!StackEmpty(S))     {      Pop(S,x);        switch(x)  {  case 10:putchar('A');break;  case 11:putchar('B');break;  case 12:putchar('C');break;  case 13:putchar('D');break;  case 14:putchar('E');break;  case 15:putchar('F');break;  default :printf("%d",x);//x<=9时原样输出  }   } printf("\n");} // conversionint main(){     int m,n;     printf("这是一个十进制数转化为二进制数、八进制数及十六进制数的演示程序……\n");     printf("请输入十进制数:");     scanf("%d",&m);     printf("\n");     printf("请输入你想将十进制转换成的进制:");     scanf("%d",&n);     printf("十进制的%d转换成%d进制的数是:",m,n);     conversion(m,n);     printf("\n");     return 0;}

链栈

头文件
#include typedef char ElemType ;typedef struct linknode{    ElemType data;    struct linknode *next;  }LiStack;  void InitStack(LiStack * &s);//构造空栈  void DestoryStack(LiStack * &s);//销毁栈  bool StackEmpty(LiStack * s);//判栈空  void Push(LiStack * &s, ElemType e);//压栈  bool Pop(LiStack * &s, ElemType &e);//出栈  bool GetTop(LiStack * s, ElemType &e);//取栈顶元素  void InitStack(LiStack * &s){      s = (LiStack * )malloc(sizeof(LiStack));   s -> next = NULL;   }   void DestoryStack(LiStack * &s){       LiStack * p = s, *q = s -> next;   while(q != NULL)    {           free(p);             p = q;           q = p -> next;    }   }   bool StackEmpty(LiStack * s){    return (s -> next == NULL);}void Push(LiStack * &s, ElemType e){    LiStack * p;    p = (LiStack *)malloc(sizeof(LiStack));    p -> data = e;    p -> next = s -> next;    s -> next = p;}bool Pop(LiStack * &s, ElemType &e){    LiStack * p;    if(s -> next == NULL)        return false;    p = s -> next;    e = p -> data;    s -> next = p -> next;    free(p);    return true;}bool GetTop(LiStack * s, ElemType &e){    if(s -> next == NULL)        return false;    e = s -> next -> data;    return true;}

程序代码

#include#include#include"shujujiegou_lianzhan.h"void   trans(int a,int b){     LiStack * s;    InitStack(s);    int yu;    ElemType e;    while(a)     {        yu = a % b;        if(yu >= 10)         {            ElemType p = yu + 'A' - 10;//转换为对应字符的ASCII值            Push(s, p);        }        else         {            ElemType p = yu + '0';//转换为对应数字字符的ASCII值            Push(s, p);        }        a /= b;    }        while(!StackEmpty(s))    {        Pop(s, e);        printf("%c", e);    }    printf("\n");    DestoryStack(s);}int main(){    int n;    while(1)    {    printf("————十进制向二进制、八进制、十六进制转换器—————\n\n");    printf("请输入一个十进制数(要求大于或等于零,其他则退出!):");    scanf("%d", &n);    if(n<0) break;    printf("十进制数%d转换为二进制数为:",n);    trans(n,2);    printf("十进制数%d转换为八进制数为:",n);    trans(n,8);    printf("十进制数%d转换为十六进制数为:",n);    trans(n,16);    system("pause");//暂停作用,包含在stdlib.h中    system("cls");//清屏作用,包含在stdlib.h中       }        return 0;}

运行结果图

bash 将二进制转换为十进制_用‘栈的思想编写一个十进制转换二进制、八进制或十六进制的程序...相关推荐

  1. 定义并调用函数 十进制转二进制_用‘栈的思想编写一个十进制转换二进制、八进制或十六进制的程序...

    用'栈'的思想编写一个十进制转换二进制.八进制或十六进制的程序 根据进制转换方法,如十进制向二进制转换,将转换的十进制整数除以二进制基数(2),得到余数和商,如果商不为0,该商继续做被除数,除以基数, ...

  2. 用‘栈’的思想编写一个十进制转换二进制、八进制或十六进制的程序

    用'栈'的思想编写一个十进制转换二进制.八进制或十六进制的程序 根据进制转换方法,如十进制向二进制转换,将转换的十进制整数除以二进制基数(2),得到余数和商,如果商不为0,该商继续做被除数,除以基数, ...

  3. 数据结构算法 二进制转十进制_数据结构 - 栈

    两种类似数组的数据结构,在添加和删除元素时更为可控,他们就是栈和队列 栈是一种遵从后进先出(LIFO)原则的有序集合.新添加或待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底.在栈里,新元素都 ...

  4. 十进制转换成八进制和十六进制 C语言

    我们处理的整数通常用十进制表示,在计算机内存中是以二进制补码形式存储,但通常二进制表示的整数比较长,为了便于在程序设计过程中理解和处理数据,通常采用八进制和十六进制,缩短了二进制补码表示的整数,但保持 ...

  5. object转换为数组_从V8源码分析一个JS 数组的内存占用问题

    前段时间,在排查一个问题的时候,遇到了一个有点令人困惑的情况,有下面这两段代码: const a = new Array(99999);a[99998] = undefined; const b = ...

  6. 十进制转化为二进制,八进制,十六进制的程序代码(C语言)

    #include <stdio.h> int main() {int number,newbase; //number为十进制数,newbase为目标进制大小printf("In ...

  7. shell 压测_【原】shell编写一个简单的jmeter自动化压测脚本

    在公司做压力测试也挺长时间了,每次测试前环境数据准备都需要话费较长时间,所以一直在考虑能不能将整个过程实现自动化进行,于是就抽空写了一个自动化脚本,当然这个脚本目前功能十分简陋,代码也不完善,很有很多 ...

  8. java求长方形面积_求一个,用Java编写一个求长方形的面积和周长的程序,(面向对象)....

    满意答案 daikuanii 推荐于 2017.11.23 采纳率:50%    等级:12 已帮助:4607人 //看看我这个程序把 比较符合面向对象的思想,告诉搂住一声,尽量把一些程序写尽方法里, ...

  9. python做一个考试系统_请用 Python 语言编写一个简易的系统登录程序。

    import tkinter.messagebox import tkinter my_window = tkinter.Tk() # 生成 my_window 主窗口 my_window.title ...

最新文章

  1. Android Acitivity 生命周期
  2. 博为峰Java技术文章 ——JavaSE Swing列表框选取事件的处理
  3. centos7通过yum安装php方法
  4. 018-继承-OC笔记
  5. MapInfo开发心得——控件篇【转】
  6. Log4j使用详解(log4j.XML格式)
  7. [leetcode] 22. Generate Parentheses(medium)
  8. 东南大学2004年程序设计第一届初赛解题报告
  9. 获取mac地址方法之一 GetAdaptersInfo()
  10. Spring异常重试框架Spring Retry
  11. 易语言MySql注册登录
  12. Android之使用Http协议实现文件上传功能
  13. 什么是共享读锁和排他写锁?
  14. 自从有了计算机和网络才有信息技术,2015年信息技术会考模拟选择题6(俞同明版)...
  15. verilog学习 (二)
  16. 2012浙江大学光华法学院毕业典礼教师发言之高艳东
  17. Tcl 语言 ——变量篇
  18. 公司找域名怎么找?有什么技巧?
  19. 华硕X370 Pro更新BIOS后黑屏自救记录
  20. 加仓减仓口诀_加仓减仓口诀

热门文章

  1. ArchLinux(2013)中的网络配置和静态IP时DNS刷新的解决方法
  2. 记一次cpu指标异常的跟踪排查
  3. ‘ActiveX component can’t create object解决方法
  4. 【实践】腾讯PCG数据中台DEVOPS和AIOPS实践.pdf(附下载链接)
  5. 【报告分享】食品饮料行业供应链发展与渠道变革趋势.pdf(附下载链接)
  6. 【报告分享】2020中国企业直播应用场景趋势研究报告.pdf(附下载链接)
  7. 计算机视觉通道域(channel)注意力机制——SENet
  8. 通俗易懂!视觉slam第九部分——光流(Optical Flow)
  9. 【论文复现】Hierarchical Attention Networks for Document Classification
  10. vsftpd增加用户 linux,linux下开通vsftpd 添加新ftp用户