题目:将十进制数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;
}
机算结果
手算结果