十进制转换八进制算法(6页)Good is good, but better carries it.精益求精,善益求善。题目:数制转换问题1. 需求分析将十进制数 N 转换成八进制数是计算机实现计算的基本问题,解决方案很多,其中最简单的方法是除 8 取余法。1)本方案采纳顺序栈的方式模拟整个过程。其原理如下:例子:(1348)10=(2504)8NN div 8N mod 8134816841682102125202从中可以看出,最先产生的余数 4 是转换加过的最低位,这正好符合栈的“后进先出”的特性。2)功能:从键盘输入任意一个非负十进制整数,输出与其等值的八进制数;若输入一个负数,则显示输入错误,请重新输入。3)测试数据:(1348)10=(2504)8 ,(0)10=(0)8,(-1234)10 输入数据错误。2. 概要设计定义顺序栈类型,由键盘输入非负十进制整数 N,执行以下循环操作:N%8 入栈,N=N/8,直至 N=0。主 要 函 数 由 建 立 空 栈 Initsqstack ( ) 、 入 栈 Push ( ) 、 出 栈 Pop ( ) 和main()函数组成。过程中函数调用关系图如下:3. 详细设计1)数据类型定义struct Sqstack{int *bottom;int *top;int maxsize;};2)系统主要子程序详细设计A.建立空栈int Initsqstack (Sqstack &s){s.bottom =(int *)malloc(sizeof (int)*20);if(s.bottom){s.top =s.bottom;s.maxsize =20;return 1;}else return 0;}B.入栈void Push(Sqstack &s,int e){*s.top++=e;}C.出栈void Pop(Sqstack &s,int &e){//出栈e=*--s.top ;}4. 测试分析5. 源程序清单#includeusing namespace std;struct Sqstack{int *bottom;int *top;int maxsize;};int Initsqstack (Sqstack &s){//建立空栈s.bottom =(int *)malloc(sizeof (int)*20);if(s.bottom){s.top =s.bottom;s.maxsize =20;return 1;}else return 0;}void Push(Sqstack &s,int e){//入栈*s.top++=e;}void Pop(Sqstack &s,int &e){//出栈e=*--s.top ;}int StackEmpty(Sqstack &s){//推断是否为空栈if(s.top==s.bottom)return 1;else return 0;}int main(){Sqstack s;int N,e;Initsqstack(s);cout<<"请输入一个非负十进制整数:"<>N;if(N<0) cout<<"输入数据错误,请重新输入:"<