利用栈实现进制的转换!
2012-12-13 14:50
330 查看
问题:将十进制数转换为任意进制数(2,8,16...).
算法:假如N为输入的数,n为要转换为的进制,若要将十进制231转换为8进制数,过程如下;
N N/n N%n
231 28 7
28 3 4
3 0 3
则输出为347,可以看出,首先得到的应该是7,然后才是4,最后是3,但是要逆序显示,自然就类似压栈出栈的数据结构了(数组也可以实现,但是没有体现其本质).
所以,只需要初始化栈后,将N%n不断的压入栈底,需要注意的是如果要转换为16进制,则需要对大于9的数字作字符处理。
算法:假如N为输入的数,n为要转换为的进制,若要将十进制231转换为8进制数,过程如下;
N N/n N%n
231 28 7
28 3 4
3 0 3
则输出为347,可以看出,首先得到的应该是7,然后才是4,最后是3,但是要逆序显示,自然就类似压栈出栈的数据结构了(数组也可以实现,但是没有体现其本质).
所以,只需要初始化栈后,将N%n不断的压入栈底,需要注意的是如果要转换为16进制,则需要对大于9的数字作字符处理。
/*栈的基本操作*/ #include <stdio.h> #include <malloc.h> //malloc,realloc #include <math.h> //含有overflow #include <process.h> #define S_SIZE 100 //栈的空间大小 #define STACKINCREAMENT 10//增加空间 struct SqStack{ int *base; //栈底 int *top; //栈顶 int stacksize; //栈当前的存储空间 }; //主函数开始 void main() {//子函数声明 void InitStack(SqStack &S);//初始化空栈 int StackEmpty(SqStack S);//判空 void GetTop(SqStack S,int &e);//获得栈顶元素 void push(SqStack &S,int e);//进栈 void pop(SqStack &S,int &e);//出栈 void convert(SqStack &S,int N,int n);//十进制转N进制 int i,num; unsigned n,N;//要转换成的进制数和要转换的数 SqStack s; InitStack(s);//初始化空栈 printf("输入要转换的十进制数和要转换为的进制数:\n"); scanf("%d,%d",&N,&n); printf("%d转换为%d进制后为:\n",N,n); convert(s,N,n); } void InitStack(SqStack &S) {S.base=(int *)malloc(S_SIZE*sizeof(int)); S.stacksize=S_SIZE; S.top=S.base;//初始化空栈 } int StackEmpty(SqStack S) { if(S.base==S.top) return 1; else return 0; } void GetTop(SqStack S,int &e) {//获得栈顶元素 e=*(S.top-1); } void push(SqStack &S,int e) {//进栈 if(S.top-S.base>=S.stacksize) {S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREAMENT)*sizeof(int)); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREAMENT;} *(S.top)=e; S.top++; } void pop(SqStack &S,int &e) {//出栈 if(S.base!=S.top) {S.top--; e=*S.top;} } void convert(SqStack &S,int N,int n) { InitStack(S); do {push(S,N%n); N/=n; } while (N!=0); int i,e; while(!StackEmpty(S)) { pop(S,e); if(e>9)//十六进制时输出字母 {e=e+55; printf("%c",e);} else printf("%d",e); } printf("\n"); }
相关文章推荐
- 利用递归方法实现任意进制转换的方法
- 利用栈实现进制的转换
- 利用python实现任意进制的相互转换
- 利用数组实现十进制数转换为各种进制数
- C语言:利用栈实现进制间转换
- 利用栈来实现进制的自动转换
- 利用栈实现进制转换1,常用进制转换成十进制
- 十进制转换为任意进制 java实现
- 利用C++中的stringstream类轻松实现字符串和数字的互相转换
- 利用POI将word转换成html实现在线阅读
- java 实现进制类型转换
- 利用栈的数据结构实现中缀表达式到后缀表达式的转换
- 利用operator实现隐式类型转换的简单应用
- 利用进制转换压缩数字
- 利用栈进行进制转换,二进制转换为十进制
- 利用数据结构中的桟 实现十进制 转为 二 到 十六 之间任何进制 的方法
- 在Oracle中实现数字进制转换完全版
- C实现:16进制字符转换成10进制整
- 用C语言代码实现n进制数转换为十进制数
- 利用GDI+实现常见图片格式任意转换的函数