用栈实现将十进制数转换为任意进制数(2,8,16...).
来源:互联网 发布:算法第四版中文电子书 编辑:程序博客网 时间:2024/06/05 02:55
解题思路:假如N为输入的数,n为要转换为的进制,若要将十进制231转换为8进制数,过程如下;
N N/n N%n
231 28 7
28 3 4
3 0 3
则输出为347,可以看出,首先得到的应该是7,然后才是4,最后是3,但是要逆序显示,自然就类似压栈出栈的数据结构了(数组也可以实现,但是没有体现其本质).
所以,只需要初始化栈后,将N%n不断的压入栈底,需要注意的是如果要转换为16进制,则需要对大于9的数字作字符处理。
#include <stdio.h> #include <malloc.h> //malloc #include <math.h> //含有overflow #define S_SIZE 100 //栈的空间大小 typedef struct SqStack{ int top; //栈顶 int maxtop; //栈最大的存储空间 int *stack; }SqStack; //初始化空栈 void InitStack(SqStack &S) {S.stack=(int *)malloc(S_SIZE*sizeof(int)); //动态申请一维数组 S.maxtop=S_SIZE; S.top=-1; } //判断空栈 int StackEmpty(SqStack &S) { if(S.top==-1) return 1; else return 0; } //判断栈满 int StackFull(SqStack &S) { if(S.top==S.maxtop) return 1; else return 0; } //进栈void push(SqStack &S,int x) { if(StackFull(S)) printf("overflow\n"); S.stack[++S.top]=x; } //出栈int pop(SqStack &S) { int x; if(StackEmpty(S)) printf("underflow\n"); x=S.stack[S.top]; S.top--; return x; } //进制转化函数void convert(SqStack &S,int N,int n) { int i,x; do { push(S,N%n); N/=n; } while (N!=0); while(!StackEmpty(S)) { x=pop(S); if(x>9) //十六进制时输出字母 {x=x+55; printf("%c",x);} else printf("%d",x); } printf("\n"); } //清空栈 void StackClear(SqStack &S) { S.top=-1; } int main() { int n,N;//要转换成的进制数和要转换的数 SqStack s; scanf("%d%d",&n,&N) ; InitStack(s); printf("%d转换为%d进制后为:\n",n,N); convert(s,n,N); StackClear(s); return 0; }
0 0
- 用栈实现将十进制数转换为任意进制数(2,8,16...).
- 将十进制数转换为任意进制数
- java将十进制数转换为任意进制数
- 数制转换:如何将十进制数N转换为x进制数?(用栈实现)
- 十进制数转换为任意进制数
- 将十进制转换为任意进制的数
- C++实现将十进制数转换为小于等于九的任意进制
- C语言从键盘输入一个十进制数将其转换为任意进制数输出
- 将任意一个十进制数数字转换为二进制形式,并输出转换后的结果
- 关于用递归将十进制数转换为二进制数
- 用递归将十进制数转换为二进制数
- 将十进制数转换为二进制数
- 将十进制数转换为二进制数
- 将十进制数转换为十六进制数
- 将十进制数转换为十六进制数
- 将十进制数转换为十六进制数
- 面试题:编写一个将十进制数转换为任意进制的算法或函数
- 用代码实现将二进制数转换为十进制,(非使用API)
- java中的局部变量与成员变量
- 挑7
- RILC系统结构及LibRIL运行机制
- Exception 和 error
- 关于LINUX网络编程中的IO 操作
- 用栈实现将十进制数转换为任意进制数(2,8,16...).
- linux shell的运行(有意思)
- 为什么写博客?
- java笔记--设计模式之模版方法模式
- 【java基础】集合类及其数据结构回忆总结
- 最大子序列和问题
- 01背包问题
- C++ 中的类型转换函数
- 最长公共子序列,Longest-Common-Subsequence(LCS)