您的位置:首页 > 理论基础 > 数据结构算法

数据结构实验之栈与队列一:进制转换

2017-09-28 22:35 246 查看

数据结构实验之栈与队列一:进制转换

Problem Description

输入一个十进制非负整数,将其转换成对应的 R (2 <= R <= 9) 进制数,并输出。

Input

第一行输入需要转换的十进制非负整数;

第二行输入 R。

Output

输出转换所得的 R 进制数。

Example Input

1279

8

Example Output

2377

思路:进制转换–辗转相除,倒序取余。所以把取余的依次存在栈中(入栈),全存完,在出栈(实现倒序过程–后进先出)

#include <stdio.h>
#include <stdlib.h>
#include <bits/stdc++.h>
#define stackmax 10000  //存储空间初始分配量
#define stacknum 10000  //存储空间分配增量
using namespace std;
typedef int selemtype;
typedef struct
{
selemtype *base; //栈底指针
selemtype *top;  //栈顶指针
int stacksize;
} sqstack;

int Initstack(sqstack &S)
{
S.base=(selemtype *)malloc(stackmax*sizeof(selemtype));
if (! S.base)
exit(0);  //存储分配失败
S.top=S.base;  //空栈条件
S.stacksize=stackmax;  //栈的存储空间
return 1;
}

int push(sqstack &S,int e)  //创建一个栈
{
if(S.top-S.base >= S.stacksize)// 当前存储空间已满,增加分配
{
{
S.base = (selemtype *)realloc(S.base,(S.stacksize+stacknum)*sizeof(selemtype));
if (! S.base ) return 0; // 存储分配失败
S.top = S.base + S.stacksize;
S.stacksize += stacknum;  //增加存储容量
}

}*S.top++=e;
return 1;

}

void  conversion(sqstack &S, int n, int r)  //进制转换
{
int t;
while(n)
{
t=n%r;
n=n/r;
push(S,t);
}
}

void put(sqstack &S)  //出栈
{
while(S.top>S.base)
{
cout<<*(S.top-1);
S.top--;
}
}

int main()
{
int n,r;
cin>>n>>r;
sqstack S;
Initstack(S);
if(n==0)
printf("0\n");
else
{
conversion(S,n,r);
put(S);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构