依据公式:
N=(N div d) * d +(N mod d) (其中,div为整除运算,mod为求余运算)
进制转换函数
//进制转换
void conversion()
{
int n, N;
LinkStack S;
S =InitStack(S);
printf("请输入想要转换的数字和进制:");
scanf("%d%d", &n, &N);
while(n)
{
S = Push(S, n%N);
n =n/N;
}
int e;
while (!StackEmpty(S))
{
S = Pop(S,&e);
printf("%d", e);
}
}
完整代码
#include <Stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
#define ERROR 0
#define OVERFLOW -1
#define Status int
#define OK 1
#define ElementType int
typedef struct StackNode{
ElementType data;
struct StackNode *next;
}StackNode, *LinkStack;
//构造
Status InitStack(LinkStack S)
{
S = NULL;
return S;
}
//压入栈
Status Push(LinkStack S, ElementType e)
{
LinkStack p;
p = (LinkStack)malloc(sizeof(StackNode));
p->data=e; //赋值
p->next=S; //压入栈顶
S=p;
return S;
}
//弹出栈
Status Pop(LinkStack S, ElementType* e)
{
LinkStack p;
if (S == NULL) return ERROR;
*e = S->data;
p = S;
S = S->next;
free(p);
return S;
}
int StackEmpty(S)
{
if(S != NULL)
return 0;
else return 1;
}
//进制转换
void conversion()
{
int n, N;
LinkStack S;
S =InitStack(S);
printf("请输入想要转换的数字和进制:");
scanf("%d%d", &n, &N);
while(n)
{
S = Push(S, n%N);
n =n/N;
}
int e;
while (!StackEmpty(S))
{
S = Pop(S,&e);
printf("%d", e);
}
}
//主函数
int main()
{
conversion();
return 0;
}