怎么处理?用栈实现数制转换,为啥会出现数字和其他符号?用codeblock编译的,帮小弟我看看
怎么办???用栈实现数制转换,为啥会出现数字和其他符号?用codeblock编译的,帮我看看。
//栈。数制转换,十进制转换为二、八、十六进制。


#include <stdio.h>
#include <malloc.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{
char *base;
char *top;
int stacksize;
}SqStack;
int InitStack(SqStack &S)
{
S.base = (char *)malloc(STACK_INIT_SIZE * sizeof(char));
if(!S.base) return 0;
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return 1;
}
int StackEmpty(SqStack &S)
{
if(S.base == S.top) return 1;
else return 0;
}
int Push(SqStack &S,char e)
{
if(S.top - S.base >= S.stacksize)
{
S.base = (char *)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(char));
if(!S.base) return 0;
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return 1;
}
int Pop(SqStack &S)
{
char e;
if(S.top == S.base) return 0;
e = *--S.top;
return e;
}
void conversion()
{
SqStack S;
int N,M;
char e;
InitStack(S);
scanf("%d %d",&N,&M);
while(N)
{
int t;
t = N%M;
Push(S,t);
N = N / M;
if(t < 10)
*S.top++='0'+t;
else
*S.top++='A'+t-10;
}
while(!StackEmpty(S))
{
e = Pop(S);
printf("%c",e);
}
}
int main()
{
conversion();
return 0;
}
------解决方案--------------------
int强转为char,实际上是转换成ASIIC码为该整数的字符
while里面的代码有问题,应该这样
------解决方案--------------------
我只想说 为什么不用字符串
假设栈中数字为i
printf("%c","01234567"[i]);
这是八进制 十六进制同理
你的简直麻烦爆了
------解决方案--------------------
int t;
t = N%M;
Push(S,t);
N = N / M;
if(t < 10)
*S.top++='0'+t;
else
*S.top++='A'+t-10;
同时压入数字本身和对应的十六进制字符。
当然一块显示了
//栈。数制转换,十进制转换为二、八、十六进制。
#include <stdio.h>
#include <malloc.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{
char *base;
char *top;
int stacksize;
}SqStack;
int InitStack(SqStack &S)
{
S.base = (char *)malloc(STACK_INIT_SIZE * sizeof(char));
if(!S.base) return 0;
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return 1;
}
int StackEmpty(SqStack &S)
{
if(S.base == S.top) return 1;
else return 0;
}
int Push(SqStack &S,char e)
{
if(S.top - S.base >= S.stacksize)
{
S.base = (char *)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(char));
if(!S.base) return 0;
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return 1;
}
int Pop(SqStack &S)
{
char e;
if(S.top == S.base) return 0;
e = *--S.top;
return e;
}
void conversion()
{
SqStack S;
int N,M;
char e;
InitStack(S);
scanf("%d %d",&N,&M);
while(N)
{
int t;
t = N%M;
Push(S,t);
N = N / M;
if(t < 10)
*S.top++='0'+t;
else
*S.top++='A'+t-10;
}
while(!StackEmpty(S))
{
e = Pop(S);
printf("%c",e);
}
}
int main()
{
conversion();
return 0;
}
栈
c
------解决方案--------------------
int强转为char,实际上是转换成ASIIC码为该整数的字符
while里面的代码有问题,应该这样
char t;
t = N%M;
if(t < 10)
t='0'+t;
else
t='A'+t-10;
Push(S,t);
N = N / M;
------解决方案--------------------
我只想说 为什么不用字符串
假设栈中数字为i
printf("%c","01234567"[i]);
这是八进制 十六进制同理
你的简直麻烦爆了
------解决方案--------------------
int t;
t = N%M;
Push(S,t);
N = N / M;
if(t < 10)
*S.top++='0'+t;
else
*S.top++='A'+t-10;
同时压入数字本身和对应的十六进制字符。
当然一块显示了