http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2131
数据结构实验之栈一:进制转换
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
输入一个十进制整数,将其转换成对应的R(2<=R<=9)进制数,并输出。
输入
第一行输入需要转换的十进制数;
第二行输入R。
第二行输入R。
输出
输出转换所得的R进制数。
示例输入
1279 8
示例输出
2377
#include<stdio.h>
#include<stdlib.h>
#define maxsize 1000
typedef int selement;
typedef struct
{
selement *base;
selement *top;
int stacksize;
}st;
int creat(st &S)
{
S.base=(selement *)malloc(maxsize*sizeof(selement));
if(!S.base) exit(-1);
S.top=S.base;
S.stacksize=maxsize;
return 1;
}
int push(st &S,selement e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(selement *)realloc(S.base,
(S.stacksize+maxsize)*sizeof(selement));
if(!S.base) exit(0);
S.top=S.base+S.stacksize;
S.stacksize+=maxsize;
}
*S.top++=e;
return 1;
}
int pop(st &S,selement &e)
{
if(S.top==S.base) return -1;
e=*(--S.top);
return 1;
}
void func(st S,long long int n,int m)
{
int e,flag=0;
if(n<0)
{
flag=1;
n=-n;
}
while(n)
{
push(S,n%m);
n=n/m;
}
if(flag==1)
printf("-");
while(pop(S,e)!=-1)
{
if(e<10)
printf("%d",e);
else
printf("%c",e+55);
}
printf("\n");
}
int main()
{
long long int n;
int m;
st S;
while(~scanf("%lld %d",&n,&m))
{
if(n==0)
printf("%d\n",0);
else
{
creat(S);
func(S,n,m);
}
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#define maxsize 1000
typedef int selement;
typedef struct
{
selement *base;
selement *top;
int stacksize;
}st;
int creat(st &S)
{
S.base=(selement *)malloc(maxsize*sizeof(selement));
if(!S.base) exit(-1);
S.top=S.base;
S.stacksize=maxsize;
return 1;
}
int push(st &S,selement e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(selement *)realloc(S.base,
(S.stacksize+maxsize)*sizeof(selement));
if(!S.base) exit(0);
S.top=S.base+S.stacksize;
S.stacksize+=maxsize;
}
*S.top++=e;
return 1;
}
int pop(st &S,selement &e)
{
if(S.top==S.base) return -1;
e=*(--S.top);
return 1;
}
void func(st S,long long int n,int m)
{
int e,flag=0;
if(n<0)
{
flag=1;
n=-n;
}
while(n)
{
push(S,n%m);
n=n/m;
}
if(flag==1)
printf("-");
while(pop(S,e)!=-1)
{
if(e<10)
printf("%d",e);
else
printf("%c",e+55);
}
printf("\n");
}
int main()
{
long long int n;
int m;
st S;
while(~scanf("%lld %d",&n,&m))
{
if(n==0)
printf("%d\n",0);
else
{
creat(S);
func(S,n,m);
}
}
return 0;
}