数据结构实验之栈一:进制转换
Time Limit: 1000MS Memory limit: 65536K
题目描述
输入一个十进制整数,将其转换成对应的R(2<=R<=9)进制数,并输出。
输入
第一行输入需要转换的十进制数;
第二行输入R。
第二行输入R。
输出
输出转换所得的R进制数。
示例输入
1279 8
示例输出
2377
提示
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
#define stackmax 10000 //栈的初始空间存储分配量
#define stacknum 10000 //存储空间每次增加的分量
using namespace std;
typedef int elemtype;
typedef struct
{
elemtype *top;
elemtype *base;
int stacksize;
} Qstack;
//构建一个空栈
int Initstack(Qstack &s)
{
s.base = (elemtype *)malloc(stackmax*sizeof(elemtype));
if( !s.base )
exit(0);
s.top = s.base;
s.stacksize = stackmax;
return 0;
}
//创建一个栈
int Pushstack(Qstack &s, int n)
{
if(s.top - s.base >= s.stacksize)//栈满, 追加存储空间
{
s.base = (elemtype *)realloc(s.base, (s.stacksize+stacknum)*sizeof(elemtype));
if(!s.base)
{
exit(0);
}
s.top = s.base+s.stacksize;
s.stacksize += stacknum;
}
/*for(int i = 0, i < n; i++)
{
scanf("%d", &e);//给栈赋值
*s.top++ = e;
}*/
*s.top++ = n;
return 0;
}
//进制转换, 求余
int conversion(Qstack &s, int n, int r)
{
int t;
while(n)
{
t = n%r;
n = n/r;
Pushstack(s, t);
}
return 0;
}
//出栈,输出栈里元素
int Putstack(Qstack &s)
{
while(s.top > s.base)
{
printf("%d", *(s.top-1));
s.top--;
}
return 0;
}
int main()
{
int n, r;
Qstack s;//定义一个栈
Initstack(s);//初始化栈
scanf("%d %d", &n, &r);
conversion(s, n, r);
Putstack(s);
return 0;
}
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
int main()
{
int n, r;
int top = -1;
int a[11100];
scanf("%d", &n);
scanf("%d", &r);
while(n != 0)
{
a[++top] = n%r;
n = n/r;
}
for(int i = top; i >= 0; i--)
printf("%d", a[i]);
printf("\n");
return 0;
}