解题思路:大家都知道C语言中可以直接通过格式输出来达到对一个数进行转换进制的目的,最近在学习栈的过程中,发现也可以使用栈来转换进制,没有什么特别的亮点,纯属写着玩玩,嘿嘿。

        题目要求输入一个十进制数能够转换为八进制数,我们知道,由十进制转换为八进制的规则便是将这个数不断除以8取余,并反向连接即得到相应的八进制数

        例如:十进制数: 80

                                80 / 8 = 10余0;   取数字   0

                                10 / 8 = 1  余2;   取数字   2

                                1   / 8 = 0  余1;   取数字   1

                  将数字 0, 2, 1 反向连接得到:120 即为所求八进制结果

        在这个过程中,“正向求值反向连接”的这个特点恰好就与栈“先进后出”相对应,所以我们便可以利用栈来达到目的 


注意事项:栈是一种先进后出的数据结构,在输出时只需按出栈的顺序输出即为正确答案

参考代码:

#include<stdio.h>

#include<stdlib.h>


typedef struct node

{

    int date;

    struct node *next;

}Node;//结点


typedef struct stack

{

    int count;

    Node *top;

}Stack;//栈


Stack *create()

{

    Stack *p;

    p = (Stack*)malloc(sizeof(Stack));

    p->count = 0;

    return p;

}//栈的创建函数


Stack *push(Stack *p, int a)

{

    Node *t;//创建一个新的结点

    t = (Node*)malloc(sizeof(Node));

    t->next = NULL;


    t->date = a;//赋值

    t->next = p->top;

    p->top = t;

    p->count++;//计数,后可方便输出

    return p;

}//入栈函数


Stack *pop(Stack *p)

{

    Node *t;

    t = (Node*)malloc(sizeof(Node));

    t = p->top;

    printf("%d", t->date);//这里直接将数字输出

    p->top = p->top->next;

    return p;

}//出栈函数


int main()

{

    int n;

    scanf("%d", &n);//传入一个十进制数

    Stack *s = create();

    while(n > 0){

        push(s, n%8);

        n = n / 8;

    }//入栈过程

    for(int i = 0 ; i < s->count ; i++){

        pop(s);//出栈同时输出

    }

}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论