//可以实现各种进制转换----by yifeng
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 12
#define STACK_INCREMENT 10
typedef int ElemType;
struct stack
{
ElemType *base;
ElemType *top;
int stacksize;
};
void initstack(stack &s)
{
s.base = (ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!s.base)
{
exit(1);
}
s.top = s.base ;
s.stacksize = STACK_INIT_SIZE;
}
bool stackempty(stack s)
{
if(s.top==s.base)
return true;
else
return false;
}
void push(stack &s,int m)
{
if(s.top-s.base >=s.stacksize)
{
s.base = (ElemType*)realloc(s.base,(s.stacksize + STACK_INCREMENT)*sizeof(ElemType));
if(!s.base)
{
exit(1);
}
s.top = s.base+s.stacksize;
s.stacksize += STACK_INCREMENT;
}
*(s.top++)=m;
}
int pop(stack &s,int &n)
{
if(s.top == s.base )
{
return 0;
}
n=*(--s.top);
}
void conversion()
{
stack s;
long num;
int m,n;
initstack(s);
printf("请输入一个整数(<90000)和进制数([2-16]):\n");
scanf("%lu %d",&num,&n);
while(num)
{
push(s,num%n);
num=num/n;
}
while(!stackempty(s))
{
pop(s,m);
if(m<=9)
printf("%d",m);
else
printf("%c",m+55);
}
printf("\n");
}
void main()
{
conversion();
}