/*
题目:数制转换(通过栈这个数据结构来求解)
内容:输入M进制的数x,输出N进制的数。
作答者:小白杨
收获:1、栈这种数据结构,只允许在栈顶进行出栈入栈操作。
2、先构造出栈的基本结构,然后初始化一个栈
再勾勒出入栈和出栈的函数
再输入M进制的数x,转换为int型入栈
再出栈的同时将M进制的数转换为十进制,然后将此十进制的数转换为N进制并入栈保存,然后出栈并转换为字符输出
3、栈,其实就是一个动态的数组
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define STACKSIZE 100
#define STACKINCR 10
#define OK 1
#define ERROR -1typedef int elemint;//构造栈的基本结构
typedef struct{int *top;int *base;int stacksize;
}Number;//栈的初始化
int initstack(Number &s)
{s.base = (elemint *)malloc(STACKSIZE * sizeof(elemint));if (!s.base)return ERROR;s.top = s.base;s.stacksize = STACKSIZE;return OK;
}//入栈
int push(Number &s, elemint e)
{if (s.top - s.base >= s.stacksize){s.base = (elemint *)realloc(s.base, (STACKSIZE + STACKINCR)*sizeof(elemint));if (!s.base)return ERROR;s.top = s.base + s.stacksize;s.stacksize += STACKINCR;}*(s.top) = e;s.top++;return OK;
}//出栈
void pop(Number &s, elemint &e)
{if (s.base != s.top){e = *s.top;s.top--;}elseprintf("栈为空\n");
}//字符数据转换为数值数据
void char_to_num(char e, elemint &n)
{if (e >= '0'&&e <= '9')n = e - '0';elsen = e - 'A' + 10;
}
//数值数据转换为字符数据
void num_to_char(elemint n, char &e)
{if (n >= 0 && n <= 9)e = n + '0';elsee = n - 10 + 'A';
}//原始进制数据入栈
void numpush(Number &s)
{int m, n, i, j;char a[50] = {0};printf("请输入原始数据进制:\n");scanf_s("%d", &m);printf("请输入要转换成的进制:\n");scanf_s("%d", &n);printf("请输入原始数据:\n");scanf_s("%s",a,50);for (i = 0; a[i] != '\0'; i++)  //将原始数据一一从字符转换数值入栈 {char_to_num(a[i], j);push(s, j);}push(s, m);push(s, n);
}//利用栈这个数据结构的存进存出为轴,进行数制转换
void charpop(Number &s)
{int m, n, z = 0, t = 1, i;char e;pop(s, n);pop(s, m);//将数据出栈并转换为十进制while (s.top != s.base){pop(s, i);z = z + t*i;t = t*m;}//将数据从十进制转换为N进制并入栈保存while (z != 0){i = z%n;push(s, i);z = z / n;}//将数据出栈并转换为字符数据输出while (s.base != s.top){pop(s, i);num_to_char(i, e);printf("%c", e);}printf("\n");
}void main()
{Number s;initstack(s);numpush(s);charpop(s);system("pause");
}

数制转换2(利用栈)相关推荐

  1. 以数制转换问题讲解栈数据结构的基本概念及其在计算机中的应用

    以数制转换问题讲解栈数据结构的基本概念及其在计算机中的应用 一.栈的概念介绍 在我们的生活中,总有这么一些例子,①食堂在堆放餐盘的时候,总是从下往上,在取餐盘的时候,又是从上往下:②最先放入厢式货车的 ...

  2. 数据结构:利用栈实现数制转换

    数制转换 从键盘输入一个十进制数n,并输入要转换的进制数m,利用栈将n转换成m进制,并输出转换后的结果. 首先设计一个含有多个菜单项的主菜单程序,然后再为这些菜单项配上相应的功能. 主菜单设计要求: ...

  3. 利用栈进行数制转换和括号匹配(C语言)

    数制转换:将十进制数转换为任意进制数.由数制转换的计算公式 N = (N / d) × d + N % d (其中N为想转换的十进制数,d为想转换的进制) 我们可以知道其转换后的结果是逆序输出,故可以 ...

  4. 第三章:顺序栈及其应用之三---数制转换

    #include <stdio.h> typedef struct LNode {int x;LNode *next; }LNode,*LinkList; LinkList L; void ...

  5. 栈的应用-数制转换(C语言数据结构)

    数制转换 在计算机中经常面对不同数制的转换问题,如将一个十进制数N转换为d进制B.数制转换的解决方法很多,其中一个简单的转换算法是重复下述两步.直到N等于零为止. x = N mod d N = N ...

  6. 利用栈实现十进制对二进制,八进制、十六进制的任意转换(N进制)

    1.程序代码如下(利用栈的动态分配实现): #include<stdio.h> #include<stdlib.h>#define ERROR 0 #define OK 1 # ...

  7. java使用链栈实现数制转换

    java实现链栈在前面有所介绍:http://www.cnblogs.com/lixiaolun/p/4644141.html 将前面java实现链栈的代码稍作修改: package linkedst ...

  8. 栈和队列应用之数制转换

    数制转换是将任意一个非负的十进制数转换为其他进制的数,一般的方法是采用辗转相除法.参考<C#数据结构> N          N/8        N%8 5142        642  ...

  9. C语言中用栈实现进制转换,利用栈实现进制转换问题

    进制转换问题 建立顺序栈或链栈,编写程序实现十进制数到二进制数的转换. 输入 输入只有一行,就是十进制整数. 输出 转换后的二进制数. 样例输入 10 样例输出 1010 十进制怎么转为二进制?十进制 ...

最新文章

  1. Java基础-Eclipse第三方安装包管理工具之Maven
  2. curl可以访问但httpclient不能访问_exta进程不能访问+ASM实例的解决方法
  3. echarts图例(legend)
  4. 【产品]如何建立交互设计自查表
  5. 天天向上续python3.3_python3的一些实例(3.1-3.8)
  6. ThreadLocal的意义和实现
  7. CodeForces - 1301E 1-Trees and Queries(LCA)
  8. 构建适用于Oracle 11.2.0.x的Linux单数据库实例的DataGuard
  9. JUnit测试框架使用介绍
  10. 英特尔回应杨笠代言争议;天弘基金称已处理在支付宝上「无故扣款」问题;Eclipse 4.19 发布 | 极客头条...
  11. maven安装junit_JUnit安装Maven – JUnit 4和JUnit 5
  12. computeshader实现全局光照
  13. 湖北省金税盘服务器链接网站,湖北省网上税务局入口:https://wsswj.hb-n-tax.gov.cn...
  14. 时间序列数据处理2——时间序列聚类算法
  15. 塑料废物管理行业调研报告 - 市场现状分析与发展前景预测
  16. CTF基础-MISC篇
  17. 光盘自动播放 html,插入dvd光盘直接播放 禁用dvd菜单制作刻录dvd光盘 光盘直接放在DVD中就可以自动播放...
  18. Python进行vivo手机评论数据信息情感分析、LDA主题分析
  19. mfs java_mfs权威指南
  20. [淘宝客技术篇003]如何获取淘客私密优惠券链接

热门文章

  1. 魔法宝石(邻接表+dfs更新)
  2. 12.计蒜客信息学题库:T1702 魔法宝石
  3. 操作系统 -- 处理器管理
  4. 纯CSS3制作的“Ribbons”效果
  5. HDU 2550 百步穿杨
  6. myeclipse 修改项目名Tomcat启动项目报错java.lang.IllegalArgumentException: Can't convert argument: null...
  7. pp模块常用表 sap_SAP PP模块常用T-CODE
  8. 飞利浦zigbee智能灯泡的软硬件设计
  9. 古老的视频去噪算法(FLT_GradualNoise)解析并优化,可实现1920*1080 YUV数据400fps的处理能力
  10. 移动软件开发定制那些事