题目:将十进制数m=1348转换成八进制数
难度:★
算法思路:十进制转八进制的核心原理是“用辗转相除法不断对8取余,最后将余数反向输出”,即先求出来的余数后输出,符合“先进后出”的栈的特性,故设置一个栈来存放余数。
代码
#include<stdio.h>
//栈的结构体
typedef struct stack{int base[100];int top;//指向当前栈顶元素
}stack;
stack s;
//入栈
int push(int e){//判满 if(s.top>=100){return 0;}s.base[++s.top]=e;return 1;
}
//出栈
int pop(int *e){//判空 if(s.top==-1){return 0;}*e=s.base[s.top--];return 1;
}
int main(){int m=1348,n=8;int e;s.top=-1;//辗转相除法后,余数入栈 while(m){push(m%n);m/=n;}printf("十进制数1348转换成八进制数为:");while(s.top!=-1){pop(&e);//注意这里要获取栈顶元素的值,且pop函数里面参数类型是整型指针,故这里要将变量e的地址传递过去 printf("%d",e); }return 0;
}
机算结果
手算结果