顺序栈实现进制转换
1.定义一个顺序栈的结构体。
typedef struct{ SElemType *base; SElemType *top; int stacksize; }SqStack;
2.写一个建立空顺序栈的函数
Status Init_Stack(SqStack &S){ S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S.base)exit(OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; }
3.写一个输出顺序栈元素的函数
Status Exit_Stack(SqStack S){ if(S.top==S.base)return ERROR; while(S.base!=S.top){ printf("%d ",*(S.base)); S.base++; } printf("\n"); }
4.这里进制转换的方法就是,先把k进制的元素转化为10进制,在由10进制转化为i进制输出出来。这里采用栈,把余数依次压栈,最后顺序弹出就可以得到i进制的值。
void conversion(int k,int i) { SqStack L; Init_Stack(L); printf("请输入想转化的数:"); int a; scanf("%d",&a); int b; int c=1; int j=0; while(a){//k进制转化为10进制 b=a%10*c; a=a/10; j+=b; c=c*2; } printf("转化为十进制为:%d\n",j); while(j){ Push_Stack(L,j%i); j=j/i; } int e; printf("转化为%d进制的数为:",i); while(!(Empty_Stack(L))){//十进制转化为i进制 Pop_Stack(L,e); if(e<10) { printf("%d",e); } else printf("%c",'A'+e-10); } }

浙公网安备 33010602011771号