分享

C|简单实现栈、及利用递归将十进制数用其他进制来输出

 thchen0103 2019-07-10

1 位的数据表示与应用

C|简单实现栈、及利用递归将十进制数用其他进制来输出

2 十进制转二进制

可以利用循环除2及求余来计算,最先计算出的余数应该是放在数字序列的最右端,最后算出的余数应该放在数字序列的最左端,而数字序列的书写是从左至右的,所以是一个倒序的操作,可以利用栈的后进先出来模拟操作,类似的,也可以利用递归来进行输出。

C|简单实现栈、及利用递归将十进制数用其他进制来输出

3 实现栈和十进制输出其它进制

#include<iostream>
using namespace std;
#define MAX_STACK_SIZE 100 /* 栈向量大小 */
typedef int ElemType;
typedef struct sqstack
{
ElemType stack_array[MAX_STACK_SIZE];
int top;
int bottom;
}SqStack;
SqStack Init_Stack(void)
{
SqStack S;
S.bottom=S.top=0;
return(S);
}
int push(SqStack &S, ElemType e) /* 使数据元素e进栈成为新的栈顶 */
{
if(S.top==MAX_STACK_SIZE-1)
return -1; /* 栈满,返回错误标志 */
S.top++; /* 栈顶指针加1 */
S.stack_array[S.top]=e; /* e成为新的栈顶 */
return 0; /* 压栈成功 */
}
int pop(SqStack &S, ElemType *e) /*弹出栈顶元素*/
{
if(S.top==0 )
return -1; /* 栈空,返回错误标志 */
*e=S.stack_array[S.top];
S.top--;
return 0;
}
void conversion(int n, int d) /*将十进制整数N转换为d(2或8)进制数*/
{
SqStack S;
ElemType e;
int k;
S=Init_Stack();
/* 求出所有的余数,进栈 */
while(n>0)
{
k=n%d;
push(S,k);
n=n/d;
}
while(S.top!=0) /* 栈不空时出栈,输出 */
{
pop(S,&e);
printf("%1d",e);
}
}
void main()
{
conversion(54,2);
cout<<endl;
conversion(54,8);
cout<<endl;
conversion(54,16);
system("pause");
}
/*
110110
66
36
*/

4 利用递归来实现十进制输出二进制

#if(0)
#include<stdio.h>
#include<stdlib.h>
void decToBin(int n, int base) {
if (n>0) {
decToBin(n/base,base);
printf("%d", n%base);
}

}
void main()
{
decToBin(13,2);
system("pause");
}
#endif
//1101
/*
f(13)
f(6)
f(3)
f(1)
1%2
3%2
6%2
13%2
*/
#if(1)
#include<stdio.h>
#include<stdlib.h>
void dec2(unsigned long n,unsigned long base)
{
int r;
r=n%base; //最后一位
if(n>=base)
dec2(n/base,base);//递归后进先出的特点很适合倒序计算;
printf("%d",r);
}
int main()
{
unsigned int i=0;
dec2(13,2);
system("pause");
return 0;
}
#endif
/*
//1101

int r=1
n=11
dec2(5)
int r=1
n=5
dec2(2)
int r=0
n=2
dec2(2)
int r=1
n=1
*/

-End-

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约