c语言十进制转换成二进制八进制十六进制,十进制数转换成二进制,八进制,十六进制(c语言)...

利用一个函数实现十进制数转换成二进制,八进制,十六进制。利用的是栈的后进先出的思想。算法简单。

#include

#include

#include

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

#define OVERFLOW -2

#define OK 1

#define ERROR -1

typedef struct{

int *base;

int *top;

int stacksize;

} SqStack;

int InitStack(SqStack &S);

int GetTop(SqStack S,int &e);

int Push(SqStack &S,int e);

int Pop(SqStack &S,int &e);

int InitStack(SqStack &S);

int StackEmpty(SqStack S);

void JinZhi(SqStack &S,int e,int cj);

int main()

{

int N,Cho;

int cj;

SqStack S;

InitStack(S);

printf("请选择转换类型:1:十进制->二进制 2:十进制->八进制 3:十进制->十六进制 \n");

printf("请输入你的选择:");

scanf("%d",&Cho);

switch(Cho)

{

case 1:cj=2;printf("你选择的是十进制转换成二进制\n\n");printf("请输入要转换的十进制数:");scanf("%d",&N);break;

case 2:cj=8;printf("你选择的是十进制转换成八进制\n\n");printf("请输入要转换的十进制数:");scanf("%d",&N);break;

case 3:cj=16;printf("你选择的是十进制转换成十六进制\n\n");printf("请输入要转换的十进制数:");scanf("%d",&N);break;

default:printf("请从1-3中选择!");

}

JinZhi(S,N,cj);

return OK;

}

void JinZhi(SqStack &S,int N,int cj)

{

int e;

char jz;

while(N)

{

Push(S,N%cj);

N=N/cj;

}

printf("转换后的值: ");

while(!StackEmpty(S))

{

Pop(S,e);

if(e>=10)

{

switch(e)

{

case 10:jz='a';break;

case 11:jz='b';break;

case 12:jz='c';break;

case 13:jz='d';break;

case 14:jz='e';break;

case 15:jz='f';break;

}

printf("%c",jz);

}

else

printf("%d",e);

}

printf("\n");

}

int InitStack(SqStack &S)

{

S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));

if(!S.base) exit(OVERFLOW);

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

return OK;

}

int GetTop(SqStack S,int &e)

{

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

e=*(S.top-1);

return OK;

}

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) exit(OVERFLOW);

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

S.stacksize+=STACKINCREMENT;

}

*S.top++=e;

return OK;

}

int Pop(SqStack &am

p;S,int &e)

{

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

e=*--S.top;

return OK;

}

int StackEmpty(SqStack S)

{

if(S.top!=S.base) return 0;

}

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 C 语言中,长整类型可以使用 `long long` 或 `unsigned long long` 关键字进行声明。下面是一个示例程序,演示如何将长整转换为二进制十六进制: ```c #include <stdio.h> int main() { unsigned long long num = 1234567890123456789ULL; printf("二进制表示:%llx\n", num); printf("十六进制表示:%llx\n", num); return 0; } ``` 在上面的程序中,`%llx` 格式控制符用于打印一个长整十六进制表示,`%llu` 格式控制符用于打印一个无符号长整十进制表示。 如果需要将长整转换为二进制字符串,则可以使用以下代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> char* to_binary_string(unsigned long long num) { char* str = (char*) malloc((sizeof(num) * 8 + 1) * sizeof(char)); memset(str, 0, (sizeof(num) * 8 + 1) * sizeof(char)); char* p = str; int i; for(i = 0; i < sizeof(num) * 8; i++) { *p++ = (num & (1ULL << (sizeof(num) * 8 - i - 1))) ? '1' : '0'; } return str; } int main() { unsigned long long num = 1234567890123456789ULL; char* binary_string = to_binary_string(num); printf("二进制表示:%s\n", binary_string); free(binary_string); return 0; } ``` 这个程序中,`to_binary_string()` 函接收一个长整,并返回一个指向该二进制字符串的指针。在函内部,我们使用位运算和循环来将字转换为二进制字符串。在主函中,我们调用 `to_binary_string()` 函,并打印字符串。请注意,我们需要释放内存,以避免内存泄漏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值