我输入65536 2然后输出结果不对
#include <stdio.h>
#include <stdlib.h>
#define Maxsize 10
#define ElementType int
typedef int Position;
typedef struct SNode *PtrToSNode;
struct SNode{
ElementType *Data;//存储元素的数组
Position Top; //栈顶指针
int MaxSize; //堆栈最大容量
};
typedef PtrToSNode Stack;
//顺序栈的创建
Stack CreateStack(int MaxSize)
{ Stack S=(Stack)malloc(sizeof(struct SNode));
S->Data=(ElementType )malloc(Maxsizesizeof(ElementType));
S->Top=-1;
S->MaxSize=MaxSize;
return S;
}
//释放栈
void Destory_Stack(Stack *S)
{ if(*S) free(*S);
*S=NULL;
return;
}
//判断栈是否已满
int IsFull(Stack S)
{ if(S->Top==Maxsize-1) return 1;//表示堆栈已满
else return 0;//表示堆栈未满
}
//判断栈是否为空
int IsEmpty(Stack S)
{ if(S->Top==-1) return 1;//表示空
else return 0;//表示非空
}
//顺序栈入栈
int Push(Stack S,ElementType X)
{ if(IsFull(S)){
printf("堆栈已满,不能入栈");
return 0;
}
else{//入栈
S->Top++;
S->Data[S->Top]=X;
return 1;
}
}
//顺序栈出栈
ElementType Pop(Stack S)
{ if(IsEmpty(S)){
printf("堆栈空,不能删除元素");
return 0;
}
else{//出栈
return (S->Data[(S->Top)--]);
}
}
//数制转换
int Conversion(int Num,int Radix)
{ Stack S;
int tmp;
if(Radix==0)
{ printf("基数不能为0\n");
return 0;
}
S=CreateStack(30);//定义堆栈最大值
if(!S)
{ printf("栈初始化失败\n");
return 0;
}
while(Num)
{ Push(S, Num%Radix);//余数入栈
Num=Num/Radix; //商作为被除数
}
while(!IsEmpty(S))
{ tmp=Pop(S);
printf("%d",tmp);
}
printf("\n");
Destory_Stack(&S);
}
//主函数实现
int main()
{
int N,R;
printf("请输入一个十进制数:\n");
scanf("%d",&N);
printf("请输入转换后的数制:\n");
scanf("%d",&R);
Conversion(N,R);
return 0;
}