第6周项目4 数制转换

来源:互联网 发布:淘宝店怎么注销重新开 编辑:程序博客网 时间:2024/04/30 17:09

问题及代码:

文件名称:main.cpp sqstack.cpp sqstack.h

作者:郑孚嘉

问题描述:把十进制的整数转换为二至九之间的任一进制数输出。请利用栈设计算法,并实现程序。
提示:要转换为r进制,则原来的数逐次除以基数r(除完之后用商再除),直到商为0,得到的一系列余数的逆序就是转换结果。这里的“逆序”,意味着后产生的余数,会先输出,后进先出,栈的机会来了……

代码:

main.cpp

#include <stdio.h>#include "sqstack.h"int main(){    int x,jz,ys,s;    printf("输入要转换的十进制数:\n");    scanf("%d",&x);    printf("输入转换的进制:\n");    scanf("%d",&jz);    s=x;    SqStack *ysz;    InitStack(ysz);    while(s!=0)    {        ys=s%jz;        s=s/jz;        //printf("%d %d\n",ys,s);        Push(ysz,ys);    }    DispStack(ysz);}

sqstack.h

#define MaxSize 100typedef int ElemType;typedef struct{    ElemType data[MaxSize];    int top;                //栈指针} SqStack;                  //顺序栈类型定义void InitStack(SqStack *&s);    //初始化栈bool Push(SqStack *&s,ElemType e); //入栈void DispStack(SqStack *s);  //输出栈

sqstack.cpp

#include <stdio.h>#include <malloc.h>#include "sqstack.h"void InitStack(SqStack *&s){    s=(SqStack *)malloc(sizeof(SqStack));    s->top=-1;}bool Push(SqStack *&s,ElemType e){    if (s->top==MaxSize-1)    //栈满的情况,即栈上溢出        return false;    s->top++;    s->data[s->top]=e;    return true;}void DispStack(SqStack *s)  //输出栈{    int i;    for (i=7;i>=0;i--)        printf("%d",s->data[i]);    printf("\n");}

 

运行结果:

 

知识点总结:

根据顺序栈的先进后出的原理可以解决数值转换的问题。



 

0 0
原创粉丝点击