精华内容
下载资源
问答
  • 编写把一个十进制数转换为R进制 (如:R=2,则转换为二进制,R=7则转换为7进制)的数制转换算法函数(要求利用栈来实现) 【算法步骤】 ① 初始化一个空栈S。 ② 当十进制数N非零时,循环执行以下操作: l把N...

    编写把一个十进制数转换为R进制

    (如:R=2,则转换为二进制,R=7则转换为7进制)的数制转换算法函数(要求利用栈来实现)
       


    【算法步骤】

    ① 初始化一个空栈S

    当十进制数N非零时,循环执行以下操作:

    N 与R 求余得到的R进制数压入栈 S
    N 更新为 N 与R 的商。

    当栈S非空时,循环执行以下操作:

    弹出栈顶元素 e

           输出e

    【算法描述】

    void conversion(int N)

    {//对于任意一个非负十进制数,打印输出与其等值的八进制数

       InitStack(S);  //初始化空栈S

       while(N)  //N非零时,循环

       {

          Push(S,N%R);  //N与R求余得到的R进制数压入栈S

          N=N/R;  //N更新为N与R的商

       }

       while(!StackEmpty(S))//当栈S非空时,循环

       {

          Pop(S,e);  //弹出栈顶元素e

          cout<<e;  //输出e

       }

    }

    C语言完整代码:

    /*进制转换*/ 
    #include <stdio.h>
    #include <stdlib.h>
    
    #define ERROR 0
    #define OK 1
    #define  MAXSIZE  20
    typedef int ElemType;
    
    typedef struct Sqstack{
    	ElemType *top;
    	ElemType *base;
    	ElemType stacksize;
    }stack;
    
    /*Function:栈初始化 */ 
    int Initstack04(stack *s){
    	s->base=(ElemType *)malloc(MAXSIZE*sizeof(ElemType));//申请空间
    	if(s->base==NULL) {
    		printf("栈创建失败!");
    		return ERROR; 
    	}
       s->top=s->base;
       s->stacksize=MAXSIZE;
       printf("栈创建成功!"); 
       return OK;
    }
    /*Function:入栈*/ 
    int Push04(stack *s,ElemType e){
    	if(s->top-s->base==MAXSIZE){
    		return ERROR;
    	}
    	*s->top++=e;
    	return OK;
    } 
    /*Function:出栈*/ 
    int Pop04(stack *s){
    	if(s->top==s->base){
    		printf("栈为空栈!\n");
    		return ERROR;
    	}
    	s->top--;
    	printf("%d ",*s->top);
    	return OK;
    }
    /*Function:进制转换*/
    void transition(stack *s){
         int n,m;
         printf("请输入您要转换的数字:\n");
         scanf("%d",&m);
         printf("请输入您要转换的进制:\n");
         scanf("%d",&n);
         while(m){
         	Push04(s,m%n);//余数入栈 
         	m=m/n;
            }
    	 printf("转换结果为:\n");
    	 while(s->top!=s->base){//输出 
    	 	Pop04(s);
    	 }
    }
    void main(){
    	stack s;
    	Initstack04(&s);
    	transition(&s);
    }

    运行结果:

    展开全文
  • )【源码运行环境】操作系统:Windows 10编译环境:Dev C++(基于C99标准)【原理】十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:1、用2整除十进制整数,可以得到一个商和余数;2、再用...

    【背景】

    在计算机中,基本的编码都是以二进制为基础。为此,理解进制转换过程,可以帮助我们更好地理解计算机底层的原理。(本题取自广西师范大学2017年硕士研究生招生考试试题编程题部分。)

    【源码运行环境】

    操作系统:Windows 10

    编译环境:Dev C++(基于C99标准)

    【原理】

    十进制整数转换为二进制整数采用"除2取余,逆序排列"法。

    具体做法是:

    1、用2整除十进制整数,可以得到一个商和余数;

    2、再用2去除商,又会得到一个商和余数;

    3、如此进行,直到商为小于1时为止;

    4、然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位;

    5、依次排列起来。

    【例子】

    以十进制14转换为二进制1110为例:

    初始值:14

    1:14 / 2 = 7 ————>余0

    2:7  /  2 = 3 ————>余1

    3:  3  /  2 = 1  ————>余1

    4:  1  /  2 = 0  ————>余1

    反向输出:1110即为所求。

    【源码实现】

    /*

    * 方法名:converse

    * 作用:用于将一个十进制数字转换为二进制数的递归实现

    * 参数:sum(商)i(位数)

    * 返回值:rest(以int保存的二进制数)

    * author: WellLee

    * 最后一次修改时间:2018年12月6日 19:02:32

    */

    int converse(int sum, int i)

    {

    int rest;                  //余数

    if(sum <= 1 ){  //递归结束条件

    return i * sum;    //结束返回值

    }

    rest = sum % 2;            //先取余数

    sum /= 2;                  //求商取整

    rest *= i;                 //进位操作(包括递归部分的i*10)

    return rest + converse(sum, i * 10); // 递归部分

    }

    【总结】

    本文提出了一种利用递归保存结果求二进制转十进制的C语言程序实现,实现该功能的程序并不止一种,仅供参考。也借此机会锻炼了自己关于递归程序设计的思想。

    【参考文献】

    广西师范大学2016年硕士研究生招生考试《806/826 数据结构》试题

    展开全文
  • 数据结构 study 6: 栈 实现 十进制 转换为 8进制

    数据结构 study 6: 栈 实现 十进制 转换为 8进制

    先用文字和图片 ,描述清楚这个问题。
    然后自己通过代码实现。
    代码纯手工写。
    文字描述 达到 只要看完文字描述,就知道怎么写代码

    题目描述

    十进制数据 123,分别获取它的 百分位,十分位和个位的数字

    步骤1:
    123 % 10 = 3

    步骤2:
    123 / 10 = 12
    12 %10 = 2

    步骤3:
    123/10 =12
    12/10 = 1
    1%10 = 1

    3 第一个进去, 2 第二个进去, 1第三个进去
    需要打印出来 123 这个字符串.
    先进后厨,后进先出. 栈
    打印1,打印2 打印3
    看到 123 这个字符串在屏幕上面

    十进制数据1348 ,转换为8进制数据

    1348 = 168x8 + 4 = 1344 +4
    1348 % 8 = 4

    1348/8 = 168

    168 = 21*8

    168 % 8 = 0

    (1348/8)/8 = 21

    21 % 8 = 5

    ((1348/8)/8)/8 = 2

    2%8 = 2

    typedef struct SqStack
    {
      SElemType *base; /* 在栈构造之前和销毁之后,base的值为NULL */
      SElemType *top; /* 栈顶指针 */
      int stacksize; /* 当前已分配的存储空间,以元素为单位 */
    }SqStack; /* 顺序栈 */
    

    top指针指向的是,下一个入栈的元素存放的位置,当前是一个空位置。
    top指针指向的是,最新插入元素的 上面的位置
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    手动写出来这个过程:

    题目分解:
    (1)需要一个输入十进制数据的函数: scanf();
    (2)对十进制 取余的过程,临时数据 放到 栈中
    (3)从栈中取出数据,逐个打印。
    (4)说到栈,需要实现一个栈。
    (5)栈的特性
    (6)出栈,入栈 基本操作

    信息基本足够了,先不考虑特殊情况。
    先实现再优化。
    用到的头文件。

    /* c1.h (程序名) */
    #include<string.h>
    #include<ctype.h>
    #include<malloc.h> /* malloc()等 */
    #include<limits.h> /* INT_MAX等 */
    #include<stdio.h> /* EOF(=^Z或F6),NULL */
    #include<stdlib.h> /* atoi() */
    #include <sys/io.h> /* eof() */
    #include<math.h> /* floor(),ceil(),abs() */
    
    #include<pthread.h> /* exit() */
    /* 函数结果状态代码 */
    #define TRUE 1
    #define FALSE 0
    #define OK 1
    #define ERROR 0
    #define INFEASIBLE -1
    /* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */
    typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
    typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */
    
    
    typedef int ElemType; /* 定义栈元素类型为整型 */
    
    /* c3-1.h 栈的顺序存储表示 */
    #define STACK_INIT_SIZE 10 /* 存储空间初始分配量 */
    #define STACKINCREMENT 2 /* 存储空间分配增量 */
    

    如果有折叠功能就好了,
    可以把下面的参考代码给折叠起来。

    先来一个没有 栈的普通版本:

    /* c1.h (程序名) */
    #include<string.h>
    #include<ctype.h>
    #include<malloc.h> /* malloc()等 */
    #include<limits.h> /* INT_MAX等 */
    #include<stdio.h> /* EOF(=^Z或F6),NULL */
    #include<stdlib.h> /* atoi() */
    #include <sys/io.h> /* eof() */
    #include<math.h> /* floor(),ceil(),abs() */
    
    #include<pthread.h> /* exit() */
    /* 函数结果状态代码 */
    #define TRUE 1
    #define FALSE 0
    #define OK 1
    #define ERROR 0
    #define INFEASIBLE -1
    /* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */
    typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
    typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */
    
    
    typedef int ElemType; /* 定义栈元素类型为整型 */
    
    /* c3-1.h 栈的顺序存储表示 */
    #define STACK_INIT_SIZE 10 /* 存储空间初始分配量 */
    #define STACKINCREMENT 2 /* 存储空间分配增量 */
    
    
    int main()
    {
    
     unsigned int data ;
     unsigned int num ;
     unsigned int div = 0 ;
     unsigned int array[10] = {0};
     int array_index =0 ;
     int i ;
     
     printf("请输入一个非负数的十进制数:(eg:1348 对应八进制2504)\n");
     scanf("%u",&data);
     printf("data = %u\n", data);
    
     while(data){
         array[array_index] = data%8;
         array_index ++ ;
    
         data = data/8;
    
     }
    
     for(i=0;i< array_index ;i++){
    
        printf("%d\n", array[i]);
     } 
     
     
     return 0 ;
    }
    
    
    

    再来一个有栈的版本

    根据上面的分析
    基本功能 都完成了,
    现在 只需要关注 怎么实现栈本身了

    怎么用程序描述一个栈呢。

    栈的特点,先进后出。
    栈是一个存储结构。
    需要分配内存空间
    栈可以存放整形,结构体,字符串等基本 元素
    需要先定义一个基本的元素 ElemType ;
    typedef int ElemType; /* 定义栈元素类型为整型 */

    一个元素入栈的时候,需要一个指针指向要存放的地址。
    入栈的元素 都放在 栈顶。
    这个栈顶指针 指向的是元素,定义为
    ElemType * top ;

    栈需要一个基地址,是栈底。
    ElemType *base ;

    栈是一个存储空间,一般都有一个大小。
    表示他的存储能力,存放了多少个元素。

    int stack_size ;

    简易有栈版本:

    /* c1.h (程序名) */
    #include<string.h>
    #include<ctype.h>
    #include<malloc.h> /* malloc()等 */
    #include<limits.h> /* INT_MAX等 */
    #include<stdio.h> /* EOF(=^Z或F6),NULL */
    #include<stdlib.h> /* atoi() */
    #include <sys/io.h> /* eof() */
    #include<math.h> /* floor(),ceil(),abs() */
    
    #include<pthread.h> /* exit() */
    /* 函数结果状态代码 */
    #define TRUE 1
    #define FALSE 0
    #define OK 1
    #define ERROR 0
    #define INFEASIBLE -1
    /* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */
    typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
    typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */
    
    
    typedef int ElemType; /* 定义栈元素类型为整型 */
    
    /* c3-1.h 栈的顺序存储表示 */
    #define STACK_INIT_SIZE 10 /* 存储空间初始分配量 */
    #define STACKINCREMENT 2 /* 存储空间分配增量 */
    
    
    typedef struct SqStack{
    
     ElemType *base ;
     ElemType *top ;
    
     int stack_size ;
    
    }SqStack;
    
    
    Status init_stack(SqStack *S)
    {
    
        S->base = (ElemType *) malloc(sizeof(ElemType) * STACK_INIT_SIZE);
        S->top = S->base  ;
    
        S->stack_size = STACK_INIT_SIZE ;
        
        return OK ;
    }
    
    Status push_stack(SqStack *S, ElemType e)
    {
        if( S->top - S->base < S->stack_size){
    
            *(S->top) = e ;
            
            S->top ++ ;
            
        }else{
    
            return ERROR ;
        }
    
        
    
        return OK ;
    }
    
    
    Status pop_stack(SqStack *S, ElemType * e)
    {
    
        if(S->top != S->base){
            
            *e =*(--S->top);
            
            
        }else{
    
            return ERROR ;
        }
    
        return OK ;
    }
    
    int main()
    {
    
     unsigned int data ;
     unsigned int num ;
     unsigned int div = 0 ;
     unsigned int array[10] = {0};
     int array_index =0 ;
     int i ;
     
     SqStack S ;
     ElemType e ;
     Status st =OK;
     init_stack(&S);
     
     printf("请输入一个非负数的十进制数:(eg:1348 对应八进制2504)\n");
     scanf("%u",&data);
     printf("data = %u\n", data);
    
     while(data){
         array[array_index] = data%8;
         array_index ++ ;
    
         push_stack(&S, data%8);
    
         data = data/8;
     }
    
     for(i=0;i< array_index ;i++){
    
        printf("%d\n", array[i]);
     } 
    
     while(1){
        st = pop_stack(&S, &e);
        
        if(st ==OK){
            printf("e = %d\n",e);
    
        }else{
    
            break ;
        }
    
     }
     
     return 0 ;
    }
    
    
    
    展开全文
  • //将十进制数转化成八进制数int * InitStack() //初始化栈{int * top,* base;base=(int *)malloc(sizeof(int) * 50);if(!base) {printf("Error!");exit();}top=base;return top;}int * push(int * top,int n) //元素...

    //将十进制数转化成八进制数

    int * InitStack() //初始化栈

    {

    int * top,* base;

    base=(int *)malloc(sizeof(int) * 50);

    if(!base) {printf("Error!");exit();}

    top=base;

    return top;

    }

    int * push(int * top,int n) //元素入栈

    {

    * top=n;

    top++;

    return top;

    }

    int pop(int * top) //取出栈顶元素

    {

    int e;

    top--;

    e=*top;

    return e;

    }

    void conversion()

    {

    int * top, * base;

    int e,N;

    int i;

    top=InitStack();

    base=top;

    printf("Input the number:\n");

    scanf("%d",&N);

    while(N!=0)

    {

    top=push(top,N%8);

    N=N/8;

    }

    printf("After change,the number is:\n");

    while(top!=base)

    {

    e=pop(top);

    top--;

    printf("%d",e);

    }

    printf("\n");

    }

    main()

    {

    conversion();

    }

    小弟刚学数据结构,就用栈的思想编了这个小程序,仅供大家参考,欢迎大家帮忙优化和完善

    2d4c3d0a1f447d3e5601ba676efc4e4b.gif

    展开全文
  • 从键盘上输入一个十进制数n,试编写一个算法, 将其转换成对应的p进制输出(p为2.8.16) */ # include <iostream> # include <stdlib.h> # include <stdio.h> using namespace std; const int ...
  • 1:第一步创建一个栈 #include #include //malloc,realloc函数 #include //使用到了pow()函数 #define maxsize 20 typedef ... } printf("转换为十进制为:%d",sum); return 0; } 运行结果: 验证: 验证结果正确!!
  • C语言求助 将十进制数据转换为你n进制数据 并输出时间:10-02整理:3721RD点击:#include #include #define MAXSIZE 20 /* 数组最大界限 */typedef int ElemType; /* 数据元素类型 */typedefstruct{ ElemTypea[MA...
  • 6、然后在该界面中,输入进制转换代码“void systemConvert(int number,int system,SqStack *SS){ int q;//商 int r;//余数 r = number/system; q = number%system; PushStack(SS,q); //int i = 0; while(r!=0) { q...
  • C语言中十六进制转十进制两种实现方法C语言 · 十六进制转十进制问题描述从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、...
  • #include int transfer(int x){int p=1,y=0,yushu;while(1){yushu=x%2;x/=2;y+=yushu*p;p*=10;if(x<2){y+=x*p;break;}}return y;}void main(){//进制转换函数的声明int ...printf("请输入一个十进制数:");scanf(...
  • printf("请输入十进制数:"); scanf("%d",&N); printf("要将N转化为几进制?"); scanf("%d",&a); while(N) { e=N%a; Push( &s , &e ); N = N / a ; } while(s.base!=s.top) { Pop(&s ,&e); printf("%d",e); } free...
  • 数据结构实验报告栈进制转换.docx 数据结构试验报告栈的应用进制转换程序姓名班级学号算法步骤1定义栈与建立空栈TYPEDEFSTRUCT{INTBASEINTTOPINTSTACKSIZE}STACKINTINITSTACKSTACKS{SBASEINTMALLOCSTACK_INIT_...
  • 顺序栈实现十进制转换成二进制 原理很简单,只是用来实验一下顺序栈的功能 首先还是.h文件 #ifndef __SEQSTACK__ #define __SEQSTACK__ typedef struct stack { int *first;//栈的首地址 int maxlen; int top; }...
  • 使用链式栈,实现十进制转八进制:键盘输入一个十进制数,经过链式栈的相关算法,输出八进制数。 代码: #include <stdio.h> //链式栈节点 typedef struct node { //数据域 int data; struct node *next; ...
  • 程序分为两个部分,首先是处理我们的输入,以及通过除法计算十进制数的过程。 data SEGMENT USE16 data ENDS stack SEGMENT USE16 db 32 dup(?) stack ENDS code SEGMENT USE16 ASSUME CS:CODE, DS:DATA, SS:...
  • 本文实例讲述了Python实现的十进制小数与二进制小数相互转换功能。分享给大家供大家参考,具体如下:十进制小数 ⇒ 二进制小数乘2取整对十进制小数乘2得到的整数部分和小数部分,整数部分即是相应的二进制数码,再用...
  • } } } //基于栈的应用函数---将十进制转为八进制 void CONVERT(int n) { sl topelm=CREATE(); do { PUSH(topelm,n%8); n=n/8; }while(n!=0); PRINTSTACK(topelm); } //主函数 int main() { sl l; l=...
  • Java实现一个简单的栈将十进制转为二进制、八进制、十六进制打印输出 栈的主要方法: push(); //入栈 pop(); //出栈并返回栈顶值 empty(); //判断栈是否为空 peek(); //获取栈顶的值 search(elem); //判断元素elem...
  • 十进制转换为其他进制时,先算的余数由下而上组成的数是最终转换结果,见上图。而栈这种结构中,元素先进后出。符合进制转换的方式,故用栈这种结构。 一.定义声明 #include<iostream> using namespace std...
  • 结构:先进后出(First in Last out),根据这个特点可以实现十进制转为二进制、十进制转为八进制、十进制转为十六进制。 MyStack接口 package qianyu.ArrayStack; public interface MyStack { //栈中一些常用的...
  • printf("请输入十进制数:"); scanf("%d",&N); printf("要将N转化为几进制?"); scanf("%d",&a); while(N) { e=N%a; Push( &s , &e ); N = N / a ; } while(s.base!=s.top) { Pop(&s ,&e); printf("%d",e); } free...
  • 输入一个十进制整数,将其转换为二进制数并以字符串形式存放于字符数组中并输出。 【输入形式】从标准输入中输入一个整数 【输出形式】将转换后的二进制数字符串输出 【样例输入】:13 【样例输出】:1101 #include&...
  • 7-3 编写函数输出一个十进制整数的十六进制形式 (100 分) 案例拓展 编写函数输出一个十进制整数的十六进制形式 编写函数,函数的参数是整数N,在函数中输出整数N的十六进制形式(递归方法实现)。主函数中输入整数a...
  • /*这题2113非常简单,你要学过数据5261结构就非常容易*//*我用个栈来帮你做*//*此栈4102数据项为整型,只定义初始化1653栈,入栈,出栈操作,输出栈中元素操作*/#include#defineMaxSize100typedefstruct{intd...
  • 进制转换

    2021-03-30 19:02:57
    日常中使用十进制,计算机使用二进制,所以十进制和二进制常常作为转换的桥梁。 其他进制转换为十进制 将其他进制数按权展开、相加即得十进制数。 例如:二进制数1101转换为十进制 1 *23 + 1 *22 + 0 *21 + 1 *20 =...
  • 1.//用意字符⑴这是输出有前缀“0”的八进制数int main(void){int a;printf("\n");scanf("%d",&a);printf("%#o",a); /*"%#o"这里的“#”就是输出前缀的,“o”是八进制*/getch();return...
  • 数据结构实验报告 栈进制转换.doc数据结构试验报告数据结构试验报告 栈的应用栈的应用进制转换进制转换程序程序 姓名姓名 班级班级 学号学号 算法步骤算法步骤 1.定义栈与建立空栈定义栈与建立空栈 typedef struct ...
  • 【判断题】用户Administrator是系统最权威的管理员【判断题】字长是计算机进行处理时,一次存取、加工和传送的数据长度【判断题】在Windows“资源管理器”窗口中,按住shift键,用鼠标左键可一次选定多个分散的文件或...
  • 基本数据内容数值型:整型和浮点型字符型整型包括:short,短整形、int,整型、long长整型、浮点型包括:float,单精度型、double,双精度型、字符型:char,字符型变量:存储数据的基本单位作用:1、变量的声明 2、...
  • 采用子程序结构,用一个子程序DECIN实现从键盘接收4位十进制数并转换成二进制数,放在BX寄存器中;用一个子程序HEXDISP完成十六进制数的屏幕显示。同时,为避免屏幕上的重叠,另外用子程序CRLF来实现回车换行。 整个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,911
精华内容 26,764
关键字:

数据结构编写十进制转r进制

数据结构 订阅