数据结构实验之栈与队列一:进制转换
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; }
相关文章推荐
- C语言 数据结构之栈与队列 数据结构实验之栈与队列一:进制转换
- SDUT 2131 数据结构实验之栈与队列一:进制转换
- 数据结构实验之栈与队列一:进制转换
- 2131-数据结构实验之栈与队列一:进制转换
- 数据结构实验之栈与队列一:进制转换
- 2131 数据结构实验之栈与队列一:进制转换
- SDUT-2131 数据结构实验之栈与队列一:进制转换
- 数据结构实验之队列一:排队买饭
- 数据结构实验之二叉树五:层序遍历(队列)
- 【2135】数据结构实验之队列一:排队买饭 sdutOJ
- 寒假第三天--栈和队列--数据结构实验之队列一:排队买饭
- sdut 2088 数据结构实验之栈与队列十一:refresh的停车场
- 3335-数据结构实验之栈与队列八:栈的基本操作
- 2133 数据结构实验之栈与队列三:后缀式求值
- 数据结构实验之二叉树五:层序遍历(数组模拟队列)
- 数据结构实验之队列一:排队买饭
- sdut 2134 数据结构实验之栈与队列四:括号匹配
- 2449-数据结构实验之栈与队列十:走迷宫
- 2134 数据结构实验之栈与队列四:括号匹配
- SDUT 2135 数据结构实验之队列一:排队买饭