C语言用栈写八进制,C语言通过栈实现十进制转二、八、十六进制

通过数据结构的学习,完成了通过C语言来实现使用栈来实现十进制转二、八、十六进制的功能#define _CRT_SECURE_NO_WARNINGS

#include

#include

#define SIZE 100  //存储空间初始分配量

#define STACKINCREMENT 10 //存储空间分配增量

typedef int SElemType;

typedef  struct {

SElemType *base;

SElemType *top; //栈顶指针

int stacksize; //当前以分配的存储空间,以元素为单位

}sqstack;

void kong(sqstack &S) //构造一个空栈

{

S.base = (SElemType *)malloc(SIZE*sizeof (SElemType));

//if(!S.base) exit(OVERFLOW);//存储分配失败

S.top = S.base;

S.stacksize = SIZE;

//return OK;

}

void push(sqstack &S, SElemType e)

{

if (S.top - S.base >= S.stacksize){//栈满,追加存储空间

S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT)*sizeof (SElemType));

//    if(!S.base) exit(OVERFLOW);//存储分配失败

S.top = S.base + S.stacksize;

S.stacksize += STACKINCREMENT;

}

*S.top++ = e;

//    return OK;

}

void pop(sqstack &S, SElemType &e)

{

//if(S.top == S.base) return ERROR;

e = *--S.top;

//return OK:

}

void er(sqstack &S, int x)//十进制转换二进制

{

int a;

while (x)

{

a = x % 2;

push(S, a);

x = x / 2;

}

while (!(S.base == S.top))

{

int e;

pop(S, e);

printf("%d", e);

}

}

void ba(sqstack &S, int x)//十进制转换八进制

{

int a;

while (x)

{

a = x % 8;

push(S, a);

x = x / 8;

}

while (!(S.base == S.top))

{

int e;

pop(S, e);

printf("%d", e);

}

}

void shiliu(sqstack &S, int x)//十进制转换十六进制

{

int a;

while (x)

{

a = x % 16;

push(S, a);

x = x / 16;

}

while (!(S.base == S.top))

{

int e;

pop(S, e);

if (e<10) printf("%d", e);

else if (e == 10) printf("A");

else if (e == 11) printf("B");

else if (e == 12) printf("C");

else if (e == 13) printf("D");

else if (e == 14) printf("E");

else if (e == 15) printf("F");

}

}

int main(){

sqstack S;

kong(S);

int x;

printf("请输入要转换的十进制数:");

scanf("%d", &x);

printf("\n转换为二进制:");

er(S, x);

printf("\n转换为八进制:");

ba(S, x);

printf("\n转换为十六进制:");

shiliu(S, x);

system("pause");

}

  • 4
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,我可以为您解答关于使用C语言顺序实现十进制转换为二进制、八进制十六进制的问题。 首先,您需要一些基本的知识。十进制是我们平常使用的数字系统,有 0~9 一共 10 个数字。二进制是计算机使用的数字系统,只有 0 和 1 两个数字。八进制是由 0~7 个数字组成的数字系统,十六进制是由 0~9 和 A~F 共 16 个数字组成的数字系统。 现在,我们开始讲解如何实现十进制转换为其他进制: 1. 二进制转换 首先,我们可以使用除 2 取余法来实现十进制转换为二进制。具体步骤如下: 1) 初始化一个顺序,将十进制数依次入; 2) 然后反转中的元素,依次出,并将该元素除以二的余数压入新的中; 3) 直到取完最后一个元素,将中所有元素出并输出即可。 下面是示例代码: void DecToBin(int dec) { int rem; SeqStack S; InitStack(&S); while (dec) { Push(&S, dec % 2); dec /= 2; } while (!StackIsEmpty(S)) { Pop(&S, &rem); printf("%d", rem); } } 2. 八进制转换 我们可以使用除 8 取余法来实现十进制转换为八进制。具体步骤如下: 1) 初始化一个顺序,将十进制数依次入; 2) 然后反转中的元素,依次出,并将该元素除以的余数压入新的中; 3) 直到取完最后一个元素,将中所有元素出并输出即可。 示例代码如下: void DecToOct(int dec) { int rem; SeqStack S; InitStack(&S); while (dec) { Push(&S, dec % 8); dec /= 8; } while (!StackIsEmpty(S)) { Pop(&S, &rem); printf("%d", rem); } } 3. 十六进制转换 我们可以将十进制数转换为二进制数,然后将二进制数每 4 位一组转换为对应的十六进制数字。具体步骤如下: 1) 先调用上面的十进制转二进制的函数 DecToBin(int dec) 来得到该十进制数对应的二进制数; 2) 然后将得到的二进制数每 4 位一组,将每组的二进制数转换为对应的十六进制数字; 3) 最后将多个十六进制数字拼接起来即可。 示例代码如下: void DecToHex(int dec) { int bin[100], hex[100], i = 0, j, n; char hex_char[16] = "0123456789ABCDEF"; SeqStack S; InitStack(&S); while (dec) { Push(&S, dec % 2); dec /= 2; } while (!StackIsEmpty(S)) { Pop(&S, &bin[i++]); } n = ceil((double)i / 4); for (j = 0; j < n * 4; ++j) { if (j < i) { hex[j / 4] <<= 1; hex[j / 4] |= bin[i - j - 1]; } else { hex[j / 4] <<= 1; } } for (j = n - 1; j >= 0; --j) { printf("%c", hex_char[hex[j]]); } } 希望可以帮到您,如有疑问请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值