出处:http://ask.csdn.net/questions/378750
#include<stdio.h>
#include<iostream>
using namespace std;
#define M 20
typedef struct mystack {
int a[M];
int top;//top表示数组元素的位置
}ST;
int isfull(ST *t);
int isempty(ST *t);
int pop(ST *t,int *data);
int push(ST *t,int data);
void transfer(int number);
int main() {
int x;
printf("请输入一个十进制数:\n");
scanf("%d",&x);
if(x!=0)//第一部分 {
transfer(x);
}
return 0;
}
int isfull(ST *t) {//判断栈是否满
if(t->top==M-1)
return 1;
else return 0;
}
int isempty(ST *t) { //判空
if(t->top)return 0; //第三部分
else return 1;
}
int push(ST *t,int data) {//入栈操作
if(!isfull(t)) {
(t->top)++;
t->a[t->top]=data;
return 1;
}
else return 0;
}
int pop(ST *t,int *data) {//*data表示出栈元素
if(!isempty(t)) {
*data=t->a[t->top];
(t->top)--;//栈长度减一
return 1;
}
else return 0;
}
void transfer(int number) {
ST t;
int r;
t.top=0;//第二部分
while(number) {//number 为非零时,持续求余
r=number%8;
push(&t,r);//入栈
number=number/8;//整除运算
}
while(!isempty(&t)) {
pop(&t,&r);//出栈
printf("%d",r);
}
printf("\n");
}