赞
踩
写一个程序,将输入的十进制数据M 转换为八进制数据M8,将其调试通过.在此基础上修改程序,实现十进制数据M 向N 进制(2或8或16)的转换.
#include<stdio.h> #include<stdlib.h> #define INIT_SIZE 100 #define N 80 typedef struct stack{ int *top,*base; int size; }stack; /********初始化构建一个空栈*********/ void initStack(stack &s){ s.base=(int*)malloc(sizeof(int)*INIT_SIZE);//分配储存空间 if(!s.base)//如果分配失败则退出 exit(0); s.size=INIT_SIZE; s.top=s.base;//注意,若写成s.base=s.top,则会导致栈初始化失败 } //push函数将元素压入栈 void push(stack &s,int m){ int *p=NULL; if(!s.base) exit(0); if(s.size<=s.top-s.base){//若储存空间不够 ,则重新申请 p=(int*)realloc(s.base,sizeof(int)*(INIT_SIZE+N)); if(!p){ printf("内存再次分配失败!"); exit(0); } s.base=p; s.top=s.base+N; s.size+=N; } *s.top=m; //将新元素压进栈顶; s.top++; //栈顶指针向上移动1个单位 } /********出栈函数*********/ int pop(stack &s){ int m; s.top--;//栈顶指针指向最上面的元素 m=*s.top;//将栈顶元素赋给m return m; } /********计算相应的进制并输出*********/ void calcu(stack &s,int n,int r){ int temp,m; while(n){ temp=n%r; n/=r; push(s,temp); } while(s.top!=s.base){//若栈中还有元素,则进入循环,执行输出操作 m=pop(s); if(r==16){//若为16进制 if(m==10) printf("A"); else if(m==11) printf("B"); else if(m==12) printf("C"); else if(m==13) printf("D"); else if(m==14) printf("E"); else if(m==15) printf("F"); else printf("%d",m); } else printf("%d",m);//2进制和8进制 } } int main(){ int i,n; stack s; initStack(s); printf("请输入一个十进制的数字:"); scanf("%d",&n); if(n<0){ printf("输入的数字有误!"); exit(0); } printf("对应的二进制的是:"); calcu(s,n,2); printf("\n对应的八进制的是:"); calcu(s,n,8); printf("\n对应的十六进制的是:"); calcu(s,n,16); return 0; }
注意:此代码具有局限性,十位以内的运算正确,超出十位则会发生错误
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。