解题思路
十进制转八进制:
整数部分,除8取余法,每次将整数部分除以8,余数为该位权上的数,商继续除以8,余数又为上一个位权上的数,然后以此类推一直下去,直到商为零
例:1348转八进制:
(1)
x: 1348
y=x%8=4
此时 4 入栈
栈中元素:
4
(2)
x:1348/8=168
y=x%8=0
此时 0 入栈
栈中元素:
0
4
(3)
x: 168/8=21
y=x%8=5
此时5入栈
栈中元素:
5
0
4
(4)
x: 21/8=2
y=x%8=2;
此时2入栈
栈中元素:
2
5
0
4
(5)
x:2/8=0
结束循环
代码
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct SNode
{
int value;
struct SNode *next;
}*SNode;
typedef struct Stack
{
SNode top;
SNode bottom;
int len;
}*Stack;
void InitStack(Stack S)
{
S->top = (SNode)malloc(sizeof(SNode));
S->bottom= (SNode)malloc(sizeof(SNode));
S->top = NULL;
S->bottom = S->top;
S->len = 0;
}
bool IsEmpty(Stack S)
{
if (S->len == 0)
return true;
else
return false;
}
void Push(Stack S, int x)
{
SNode node = (SNode)malloc(sizeof(SNode));
node->value = x;
if (S->top == S->bottom)
{
S->top = node;
node->next = NULL;
}
else
{
node->next = S->top;
S->top = node;
}
S->len++;
}
//出栈
void Pop(Stack S)
{
if (IsEmpty(S))
printf("此栈为空\n");
else
{
printf("栈顶元素为:%d\n", S->top->value);
S->top = S->top->next;
S->len--;
}
}
void main()
{
Stack S = (Stack)malloc(sizeof(Stack));
InitStack(S);
printf("输入要转换的数:\n");
int x = 0;
scanf_s("%d", &x);
while (x)
{
Push(S, x%8);
x = x / 8;
}
while (!IsEmpty(S))
{
Pop(S);
}
system("pause");
}
运行结果

本文介绍了使用C语言实现十进制数转换为八进制数的方法,通过除8取余的策略,逐步将整数部分转换,并用栈来存储余数。详细展示了转换过程及对应的代码实现。
栈的应用——数值转换(十进制转八进制)&spm=1001.2101.3001.5002&articleId=106268877&d=1&t=3&u=0e74f6f9024c4d5d80aec127a9711641)
3043

被折叠的 条评论
为什么被折叠?



