解题思路:大家都知道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分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复