@【数据结构】(栈和递归实现进制转换)
分别用栈和递归来实现十进制转换为任一进制
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#define MAXN 10 /* 栈的最大容量 */
using namespace std;
typedef int ElemType;
typedef struct
{
ElemType data[MAXN];
int top;
}SqStack;
void InitStack(SqStack &st)
{
st.top = -1;
}
int push(SqStack &st, ElemType x) /* 进栈函数 */
{
if (st.top == MAXN - 1) //栈满上溢返回0
return 0;
else
{
st.top++;
st.data[st.top] = x;
return 1;
}
}
void pop(SqStack &st, ElemType &x) /*出栈函数,依次输出栈中所有元素*/
{
for(st.top;st.top!=-1;st.top --)
cout<<st.data[st.top];
cout << endl;
}
//栈实现十进制转任意进制
void stack(int m, int n)
{
SqStack st;
ElemType x;
InitStack(st);
int r[10], i = 0;
int a = m;
do
{
r[i] = a % n;
push(st, r[i]);
i++;
a = a / n;
} while (a != 0);
cout << "栈实现进制转换结果为:";
pop(st, x);
}
//递归实现进制转换
int function(int m, int n)
{
int a = m;
if (a< n) return a;
return a % n + 10 * function(a / n,n);
}
void main()
{
int m, n,index;
cout << "输入十进制数字:";
cin >> m;
cout << "要转化为的进制";
cin >> n;
while (1)
{
cout << "-------------------------------" << endl;
cout << "请选择路径:" << endl;
cout << "1:使用栈实现" << endl;
cout << "2:使用递归函数实现" << endl;
cin >> index;
cout << "-------------------------------" << endl;
switch (index)
{
case 1:stack(m, n); break;
case 2:
cout <<"递归实现进制转换结果为:"<< function(m, n) << endl;
break;
}
}
system("pause");
}
测试示例: