Problem Description
输入一个十进制非负整数,将其转换成对应的 R (2 <= R <= 9) 进制数,并输出。
Input
第一行输入需要转换的十进制非负整数;
第二行输入 R。
Output
输出转换所得的 R 进制数。
Example Input
1279 8
Example Output
2377
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define STACKINITSIZE 100
#define STACKINCREMENT 10
#define OVERFLOW -2
#define ERROR -1
#define OK 1
typedef int SElemType ;
typedef int Statu;
typedef struct node
{
SElemType * base;
SElemType * top;
int stacksize;
} SqStack;
void Conversion(int n, int r);
Statu InitList(SqStack &S);
Statu Push(SqStack &S, SElemType e);
Statu Pop(SqStack &S, SElemType &e);
int main()
{
int n, r;
scanf("%d%d", &n, &r);
if(n < 0)
exit(OVERFLOW);
Conversion(n, r);
return 0;
}
Statu InitStack(SqStack &S)
{
S.base =(SElemType *)malloc(STACKINITSIZE*sizeof(SElemType));
if(!S.base)
exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACKINITSIZE;
return OK;
}
Statu Push(SqStack &S, SElemType e)
{
if(S.top - S.base >= S.stacksize)
{
S.base =(SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT)*sizeof(SElemType));
if(!S.base)
exit(OVERFLOW);
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
* S.top++ = e;
return OK;
}
Statu Pop(SqStack &S, SElemType &e)
{
if(S.top == S.base)
return -1;
e = * --S.top;
return OK;
}
void Conversion(int n, int r)
{
int i, j = 0;
SqStack S;
InitStack(S);
if(n == 0)
printf("0\n");
else
{
while(n != 0)
{
i = n % r;
n /= r;
Push(S, i);
j++;
}
while(j--)
{
Pop(S, i);
printf("%d", i);
}
printf("\n");
}
}
本文介绍了一个将十进制非负整数转换为指定R进制数的算法实现,通过使用栈来逆序存储转换过程中的余数,最终输出转换后的R进制数。示例中给出了具体的输入输出实例。
3012

被折叠的 条评论
为什么被折叠?



