利用C/C++将十进制数转换为十六进制。用到堆栈。我完成了2、8进制转换,16进制有ABCDEF字母,求帮助

#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREAMENT 10

typedef struct
{
int *base;
int *top;
int stacksize;
} SqStack;
void InitStack(SqStack*);
int StackEmpty(SqStack*);
void Push(SqStack*,int);
int Pop(SqStack*,int *);
void InitStack(SqStack *s)
{
s->base=(int*)malloc((STACK_INIT_SIZE)*sizeof(int));
if(!s->base) exit(0);
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
}
int StackEmpty(SqStack *s)
{
if(s->top==s->base)
return 1;
else
return 0;
}
void Push(SqStack *s,int e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(int*)realloc(s->base,(s->stacksize+STACKINCREAMENT)*sizeof(int));
if(!s->base) exit(0);
s->top=s->base+s->stacksize;
s->stacksize+=STACKINCREAMENT;
}
*(s->top) = e;
s->top++;
}
int Pop(SqStack *s,int *e)
{
if(s->top==s->base)
return 0;
else
e=--s->top;
return * e;
}
void main()
{
SqStack s;
int e,m,n;
InitStack(&s);
scanf("%d%d",&m,&n);
while(m)
{
Push(&s,m%n);
m=m/n;
}
while(!StackEmpty(&s))
printf("%d",Pop(&s,&e));
if(n==2)
printf("B\n");
else if(n==8)
printf("Q\n");
if(n==16)
{ switch(e)
{ case 10:printf("A");break;
case 11:printf("B");break;
case 12:printf("C");break;
case 13:printf("D");break;
case 14:printf("E");break;
case 15:printf("F");break;
default :printf("error");}
}
}
这是我的源程序

第1个回答  2012-03-29
printf("%02X\n", num);

OR
char HexStr[]="0123456789ABCDEF";

printf("%c%c", HexStr[num>>28 & 0xf], HexStr[num>>24 & 0xf]);
......本回答被提问者采纳
第2个回答  2012-03-20
针对有ABCDEF的字符问题,可以另辟一个字符堆栈来解决。
第3个回答  2012-03-23
输出字符: num-10+'A'
第4个回答  2012-03-20
你要帮助什么?程序有错找不到?

利用堆栈,设计算法将一个十进制正整数转换为十六进制数输出。(先设计存...
存储结构就是int 数组 Stack,算法就是每次输入一个数字x,进行下面的循环:1、x 不为零继续,为零则跳出。2、每次将x 余16 的结果入栈(实际上是将x 的16 进制的第i 位入栈,i 表示循环次数)。函数式程序设计语言中,不同子函数的参数的种类和个数是不相同的,编译器也是使用堆栈来存储子程...

利用顺序栈将二进制转换八进制
首先必须要搞清楚二进制和八进制的转换关系,由于 2 的三次方等于 8,故可以将二进制数字从右往左每三位一组就是一个八进制数字,前面不足的补 0。(例如:二进制的 1 010 100 000 111 101转换为八进制为:124075)然后设置一个堆栈的数据结构,在进行不同进制转换的过程中,需要对二进制的每一...

Java和C + +有什么区别?
Java和c++的相似之处多于不同之处,但两种语言问几处主要的不同使得Java更容易学习,并且编程环境更为简单。我在这里不能完全列出不同之处,仅列出比较显著的区别: 1.指针 JAVA语言让编程者无法找到指针来直接访问内存无指针,并且增添了自动的内存管理功能,从而有效地防止了c/c++语言中指针操作失误...

C\/C++指针从浅入深介绍——基于数据内存分配的理解
指针介绍:指针是C\/C++中用于直接操作地址的数据类型。通过指针可以访问、修改内存中的数据,节省存储空间并使代码更简洁。指针保存地址,*p表示该地址的值。指针运算如p+1可以移动指针到下一个位置。指针运算:p+1表示指针向后移动一个指针类型所占字节数的位置。类型转换如int*转char*会改变指针的类型...

关于c++提示的错误语句
16进制或8进制常数太大 If statement missing( If语句缺少"("If statement missing)If语句缺少")"Illegal character ''x'' 非法字符x Illegal initialization 非法的初始化 Illegal octal digit 非法的8进制数字 Illegal pointer subtraction 非法的指针相减 Illegal structure operation 非法的结构体操作 Illegal use ...

已知一个无符号整数number,写一个算法,将其转换为八进制数。要求...
1)实现一个链表 2)把链表做成堆栈 3)实现 NummerToOct C实现的话1)2)全用函数 C++的话全用类

计算机基础语言(急求)
我们使用的C语言就是使用的后者。 3、专用语言 CAD系统中的绘图语言和DBMS的数据库查询语言。 1.1.机器语言 电子计算机所使用的是由0和1组成的二进制数,二进制是计算机的语言的基础。计算机发明之初,人们只能降贵纡尊,用计算机的语言去命令计算机干这干那,一句话,就是写出一串串由0和1组成的指令序列交由计...

原来jdk自带了这么好玩的工具——使用 jstack定位死循环
计算出对应的16进制为:769d 当然也可以用其他的计算工具,比如mac系统自带计算器就支持进制之间的转换 在命令行输入以下命令,这种方法更加快速,推荐使用 其中,grep 命令是查找结果为769d的内容,-A 20 表示打印匹配所在行的后20行内容。直接帮我们定位到所在线程的堆栈,结果如下 当然也可以用下面的...

急!“\/”应用程序中的服务器错误
4、微软WINDOWS系统的漏洞,windows把内存地址0X00000000到0X0000ffff指定为分配null指针的地址范围,如果程序试图访问这一地址,则认为是错误。c\/c++编写的程序通常不进行严格的错误检查,当采用malloc来分配内存而可供分配的地址空间不够的情况下返回null指针。但是代码不检查这种错误,认为地址分配已经成功,于是就访问0X...

利用堆栈求中缀表达式值
利用堆栈求中缀表达式值:21+5*(20-5*(2+5)*2+100),要求给出操作数栈和操作符栈的运作过程。21和5进操作数栈,+和*进运算符栈后,*的优先级高于+,那21、5、*都出栈运算,运算顺序不就变了吗?一定要转成后缀表达式吗? 展开  我来答 2

相似回答