用C语言把十进制转换为8进制,最好用栈结构

如题所述

用系统栈(递归)实现转换的函数:
系统递归函数在调用时,如果输出语句是在调用语句的后面时,则输出部分是放入系统栈中的(须等到递归调用返回时,才轮到输出语句的执行)。使用递归函数的优点是程序编写简单,压栈与退栈操作由系统完成,特别适合于问题本身具有递归的特点。缺点是效率上比非递归的要差些。
#include<stdio.h>
void dec2oct(int x) //将十进制数x转化为8进制数输出
{if(x>7)dec2oct(x/8); //如果 x 不止一位8进制数,则先处理其高位部分
printf("%d",x%8); //递归返回时再输出 x 的最低位
}
int main()
{int x;
scanf("%d",&x); //读入要转换的十进制数x
dec2oct(x); //将 x 转换为8进制数输出
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-14
#include<stdio.h>
#include<malloc.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
 
typedef struct {
    int *base;
    int *top;
    int stacksize;
}Sqstack;
 
void Initstack(Sqstack &s)
{
    s.base=(int *)malloc(STACK_INIT_SIZE * sizeof(int));
    if(!s.base)
        return;
    s.top=s.base;
    s.stacksize=STACK_INIT_SIZE;
}
 
int Push(Sqstack &s,int e)
{
    if(s.top-s.base>s.stacksize)
    {
        s.base=(int *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(int));
        if(!s.base)
            return false;
        s.top=s.base+s.stacksize;
        s.stacksize+=STACKINCREMENT;
    }
    *s.top++=e;
     return true;
}
 
int Pop(Sqstack &s,int &e)
{
    if(s.top==s.base)
        return false;
    e=*--s.top;
    return true;
}
 
int main()
{
    int N,e;
    Sqstack s;
    Initstack(s);
    scanf("%d",&N);
    while(N)
    {
        Push(s,N%8);
        N=N/8;
    }
    while(s.base!=s.top)
    {
        Pop(s,e);
        printf("%d",e);
    }
    return 0;
}

追问

如何用栈,或者是说如何定义栈

本回答被提问者和网友采纳
第2个回答  2016-07-27
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct stacknode
{
int num;//储存每次除得的结果
struct stacknode *next;
}
struct stacklist
{
int total;//储存总元素个数
stacknode *top;//栈顶指针
}
void initialstack(stacklist *);
void pushstack(stacklist *,int);
void popstack(stacklist *,int *);
int main()
{
int num;
int remain;
int *a=#
printf("please input a num");
scanf("%d",&num);
stacklist *pt=(stacklist *)malloc(sizeof(stacklist));
initialstack(pt);
while(num!=0)
{
remain=num%8;
push(pt,remain);
num=num/8;
}
while(pt->top)
{
popstack(pt,a);
printf("%d",num); //这里我是将八进制数直接输出了,如果你想储存下来,只要依次把pop出来的数存在数组里就行了。
}
printf("\n");
return 0;
}
void initialstack(stacklist *pt)
{
pt->top=(stacknode *)malloc(sizeof(stacknode));
int num=0;
top=NULL;
}
void pushstack(stakclist *pt,int num)
{
stacknode *a=(stacknode *)malloc(sizoef(stacknode));
a->num=num;
a->next=pt->top;
pt->top=a;
}
void popstack(stacklist *pt,int *a)
{
if(pt->top)
{
*a=pt->top->num;
pt->top=pt->top->next;
}
else
{
printf("error");
}
}

哪里看不懂欢迎追问。
第3个回答  2016-08-03
直接转换
int a = 10;
int b;
char Format[10];
sprintf(Format,"%o",a); //先得到他的八进制是多少
sscanf(Format,"%d",&b); //再放到用来装的
这样就可以了.
第4个回答  2016-07-19
#include <stdio.h>
#define MaxSize 100
struct Stack
{
int iTop;
int iData[MaxSize];
};
int main()
{
Stack s;
s.iTop = -1;
int i;
int a;/*要转的数*/
scanf("%d",&a);
while (a != 0)
{
s.iData[++s.iTop] = a % 8;
a /= 8;
}
for (;s.iTop >= 0;s.iTop--)
printf("%d",s.iData[s.iTop]);
return 0;
}
纯手打,谢谢~
相似回答