将十进制数转换为任意进制,利用栈的后进先出(LIFO)原则,将每次取得的余数倒序输出。
例如:将159转换为八进制数237
159=8*19+7;
19=8*2+3;
2=8*0+2;
最后结果为237。
代码如下:
#include<stdio.h>
#define MAX_SIZE 100
#define Stacktype int
#include<stdlib.h>
typedef struct Stack{
Stacktype *data;
int top;
int size;
}Stack;
void initStack(Stack *s);
void push(Stack *s,Stacktype r);
Stacktype pop(Stack *s);//出栈并返回栈顶元素
int main()
{
Stack s;
int num,p;
initStack(&s);
//printf("请输入一个十进制数:\n");
scanf("%d",&num);
//printf("请输入需要转换的进制如2,8,16:\n");
scanf("%d",&p);
if(p==16)//16进制前缀0X
printf("0X");
int q=num,r;
for(q=num;q>0;q=q/p){
r=q%p;
push(&s,r);
}
while(s.top!=-1){
int a=pop(&s);
if(a>=10&&a<=15)
{
char ch='A'+a-10;
printf("%c",ch);
}
else
printf("%d",a);
s.top--;
}
printf("\n");
system("pause");
return 0;
}
void initStack(Stack *s){
s->data=(Stacktype *)malloc(sizeof(Stacktype)*MAX_SIZE);
s->size=MAX_SIZE;
s->top=-1;
}
void push(Stack *s,Stacktype r){
s->data[++s->top]=r;
}
Stacktype pop(Stack *s){
return s->data[s->top];
}