首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

十进制数转换成x进制-栈兑现

2012-09-28 
十进制数转换成x进制----栈实现十进制数转换成x进制栈实现题目:输入一个十进制数n,以及要求转换成的进制x,

十进制数转换成x进制----栈实现
                                         十进制数转换成x进制栈实现

                       题目:输入一个十进制数n,以及要求转换成的进制x,输出x进制下的n.用栈实现.约定输入的数为正整数,进制x为2-36,输出的x进制数有0-9十个数字及26个大写字母组成.

              分析:进制转换中很简单的一个,用数n不断除x,并将商赋给n,直到n变为0,在这个不断相除的过程中,每一次相除都会产生一个余数,把余数依次排列,逆序组成的数就是x进制下的n了.这个原理大家应该知道的.可以用数组,实现此题.但,栈的原理是后进先出,此题也就是要逆序输出.不过.这个栈的函数模版,要自己写吗?不知道有木有只要加一个头文件就可以用栈函数的呢...不过,不得不说,栈真的很强大....哈哈....       栈的初学者....

             代码:

//  这是个用栈把十进制数n转换成x进制的数的程序,默认输入的数是正整数//  转换的进制在2-36之间,有0-9以及26个大写字母来表示#include<stdio.h>#include<stdlib.h>#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define OVERFLOW -2#define ERROR 0#define OK 1typedef struct{int *base;int *top;int stacksize;}SqStack;typedef int Status;Status InitStack(SqStack &S)   //构造空栈{S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));if(!S.base)exit(OVERFLOW);S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;}Status Push(SqStack &S,int e) //插入元素e为新的栈顶元素{if(S.top-S.base>=S.stacksize){S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));if(!S.base)exit(OVERFLOW);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top++=e;return OK;}Status StackEmpty(SqStack S)   //判断是否为空栈{if(S.top==S.base)return 1;elsereturn 0;return OK;}Status Pop(SqStack &S,int &e)  //删除栈顶元素并用e返回其值{if(S.top==S.base)return ERROR;e=*--S.top;return OK;} int main(){printf("这是个把十进制数n转换成x进制的数的程序:\n");printf("\n请输入十进制数n:\n");int n,m;SqStack S;int e;InitStack(S);while(scanf("%d",&n)!=EOF){printf("请输入要转换的进制x:\n");int x;scanf("%d",&x);m=n;while(n){Push(S,n%x); n/=x;}printf("十进制数%d转换成%d进制为:\n",m,x);while(!StackEmpty(S)){Pop(S,e);if(e>=10)printf("%c",e-10+'A');elseprintf("%d",e);}printf("\n\n请输入十进制数n:\n");}return 0;}


 

热点排行