用栈实现进制转换

“除基取余 + 顺序栈”  实现十进制数转换成其他进制数,代码如下:

#include <stdio.h>
#define MAX_L 100

//定义栈
typedef struct
{
    int data[MAX_L];        
    int top;            
}Stack;

//进制转换
//origin是待转数,right是要转的目的数的权
void Convert(int origin, int right)  
{
    Stack s;        //初始化栈
    static char *lookup = "0123456789ABCDEF";    //用于输出
    s.top = -1;

while(origin)
    {
        s.data[++(s.top)] = origin % right;
        origin /= right;
    }

while(s.top != -1)
    {
        putchar(lookup[s.data[s.top--]]);
    }
    printf("\n");
}

int main()
{
    int num, r;

while(1)
    {
        puts("请输入要转换的数和要转换的进制权(eg:12345,2):");
        scanf("%d,%d", &num, &r);
        Convert(num, r);
    }
    
    scanf("%d",&r);
    return 0;
}

时间: 2024-10-10 17:14:37

用栈实现进制转换的相关文章

数据结构实验之栈:进制转换

            数据结构实验之栈:进制转换 输入一个十进制整数,将其转换成对应的R(2<=R<=9)进制数,并输出. 输入 第一行输入需要转换的十进制数:第二行输入R. 输出 输出转换所得的R进制数. 模板: while(n!=0) { mod = n%r; q[i++] = mod;//i初始化为0 n/=r; }  

顺序栈(进制转换 + 括号匹配 + 判断栈表 + 最长括号匹配长度)

#include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define STACK_INIT_SIZE 100 #define STACKLINCREMENT 10

利用栈实现进制转换

#include<stdio.h>#include<malloc.h> #define MAX_STACK_SIZE 10//静态栈向量大小 #define ERROR 0#define OK 1 typedef int ElemType;typedef int Status;/栈的应用:进制转换/typedef struct sqstack{ElemType stack_array[MAX_STACK_SIZE];// int size;int top;int bottom;}S

c语言之进制转换(栈实现)

从上两篇博客中我们可以知道,栈具有后进先出的特性,而进制转换的打印输出刚好与计算过程相反,满足栈这后进先出的特性, 所以可以用栈很快的实现进制转换,下面是用栈实现进制转换的c函数 void conversion (SqStack *pstack,unsigned int N, const unsigned int d){ if( pstack == NULL)//当传入参数为指针,必须判空 exit(-1); int mod ;//保存mod = N %d while( N != 0){ mod

浅谈栈&amp;&amp;进制转换

利用stack实现进制转换 Stack.h #ifndef _STACK_H_ #define _STACK_H_ #include<iostream> #include<assert.h> using namespace std; typedef int ElemType; #define STACK_MAX_SIZE 100 #define HEX 2 typedef struct Stack { ElemType *base;//栈底指针 int top; //栈顶标识 in

数据结构实验之栈一:进制转换(栈的应用)

 数据结构实验之栈一:进制转换 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 输入一个十进制整数,将其转换成对应的R(2<=R<=9)进制数,并输出. 输入 第一行输入需要转换的十进制数: 第二行输入R. 输出 输出转换所得的R进制数. 示例输入 1279 8 示例输出 2377 提示 来源 示例程序 后台数据太水,按理说应该考虑零的情况,但是你不判断零也是对的. #include <stdio.h> #i

hdu 2031 进制转换(栈思想的使用)

进制转换 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 63039    Accepted Submission(s): 34261 Problem Description 输入一个十进制数N,将它转换成R进制数输出. Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<&

java:数据结构(二)栈的应用(进制转换)

说到进制转换,java已经封装了基本的方法,在竞赛中使用封装的方法自然能节省大量时间 另一位仁兄介绍的封装好的方法: https://blog.csdn.net/m0_37961948/article/details/80438113 如果不想看上面的全部,我总结了两条基本方放,记下就可以随意转化: 掌握这两个方法就可以实现任意进制的随便转化 (这个是针对竞赛,如果是需要学习底层,大家还在看api研究吧) 再看一个水题: 题目描述 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字

大数进制转换问题

在数据结构课关于栈的这一章中,我们都学过用"模2取余法"来将一个10进制数转换为一个二进制数,进而可以推广到"模n取余法",经其转换为n进制(n任意指定). 确实,这是一个很基础的题目,可你是否想过如果这个10进制数是一个大数(其位数可能上千位,此时用一般数据类型肯定是会溢出的),那么这个问题又如何来求解呢? 当然,也许你会说很简单嘛,自己写一个大数类(当然至少要写一个大数除法才行),或者你用的是Java这种现代化语言,就更轻松了,直接用BigInteger这样的大