利用顺序栈(基于数组)实现十进制转换输出其他进制数
来源:互联网 发布:servlet 接收json 编辑:程序博客网 时间:2024/06/05 16:27
题目:利用顺序栈实现将任意10进制数转换成对应的二进制,八进制,16进制输出
思路:利用短除法的原理以及栈先进后出的特点,先构建好一个顺序栈,这里我用的是数组,把每一次整除的余数压进栈里,然后再把栈里的数据依次取出,输出的便是对应进制的结果,需要注意的是十六进制比较特殊,得判断输出字母的情况
代码如下:
#include <stdio.h>#include <string.h>#include <stdlib.h>#define N 50enum bool{false,true};//定义枚举型辅助判断struct stack//用一个结构体来定义栈{int inter[N];//存放栈真实数据的数组int top;//栈顶元素};struct stack *S_init()//栈的初始化{struct stack *S = malloc(sizeof(struct stack));if(S == NULL)//判断内存分配{printf("内存分配失败\n");return NULL;}bzero(S,sizeof(struct stack));//清空结构体S->top = -1;//初始化topreturn S;}enum bool stack_empty(struct stack *S)//判断栈是否为空{if(S->top == -1)return true;else return false;}enum bool stack_full(struct stack *S)//判断栈是否满了{if(S->top == N-1)return true;elsereturn false;}enum bool stack_push(struct stack *S,int x)//入栈(插入新元素){if(!stack_full(S))//栈不满时插入{S->inter[++S->top] = x;return true;}else{printf("栈已满,无法入栈!\n");return false;}}int stack_pop(struct stack *S)//退栈{if(!stack_empty(S))//栈不为空的时候,取出栈顶元素{if(S->inter[S->top] == 10)//判断十六进制时每一位输出字母的情况printf("A");else if(S->inter[S->top] == 11)printf("B");else if(S->inter[S->top] == 12)printf("C");else if(S->inter[S->top] == 13)printf("D");else if(S->inter[S->top] == 14)printf("E");else if(S->inter[S->top] == 15)printf("F");elseprintf("%d",S->inter[S->top]);//打印栈顶元素S->top--;}elseprintf("栈是空的\n");}int SysConvert(int n,int m)//进制转换,n为需要转换的十进制数,m为目标进制{struct stack *St = S_init();while(n){if(stack_push(St,n%m))//将每一次的余数压入栈n = n/m;else break;}printf("转换后的结果为:");while(!stack_empty(St)){stack_pop(St);}return 0;}int main(int argc, char const *argv[]){int m,n;printf("请输入你要转换的十进制数:");while(1){if(scanf("%d",&n) && getchar() == '\n')//判断输入的合法性break;printf("输入不合法,请重新输入:");while(getchar() != '\n');}printf("请输入要转换的进制:");while(1){if(scanf("%d",&m)&&((m == 2)||(m == 8)||(m == 16))&&(getchar() == '\n'))//判断输入的合法性break;printf("输入进制数不合法,请重新输入:");while(getchar() != '\n');}SysConvert(n,m);printf("\n");return 0;}
PS:我用的是Linux下的gcc编译,貌似不支持bool型,运行报错,所以我定义了一个枚举类型来判断,当然也可以用宏定义。输入的时候增加了合法性的判断,运行结果如下
刚学栈没多久,程序不足之处希望大家指出。
阅读全文
1 0
- 利用顺序栈(基于数组)实现十进制转换输出其他进制数
- 利用栈实现十进制到二进制的转换输出
- 利用数组实现十进制数转换为各种进制数
- 顺序栈实现十进制转换二进制
- 利用栈实现二进制转换为十进制
- 十进制转换成其他进制数
- 十进制数转换其他进制数
- 十进制转换为其他进制数
- 顺序栈实现十进制和八进制之间的转换
- 用顺序栈实现十进制数转换成二进制数
- 十进制整数转换为其他进制输出
- 数据结构5:利用栈实现二进制到十进制的转换
- js-栈的使用- 利用数组实现十进制转二进制
- 输入一个十进制数N,将它转换成R进制数输出(运用递归实现)
- 利用栈将十十进制转换为其他进制
- 十进制数到其他进制数的转换
- <iOS>十进制数转换成其他进制数
- 十进制数转换成其他进制数
- 计算机专业词汇
- Android类加载器源码简析
- 一周一更之attribute
- C#200课的主要内容
- 【字符串入门专题1】J
- 利用顺序栈(基于数组)实现十进制转换输出其他进制数
- sql优化小总结:
- ReactNative——UI3.ScrollView 实现轮播图效果
- Java反射和代理简介
- 大数据经典学习路线(及供参考)
- python 安装zbar
- C++操作符的优先级及网上找的c++primer 第五版课后习题分析
- C语言中的动态内存分配
- 队列的定义以及实现