数据结构-栈的运用-数的进制转换

这篇具有很好参考价值的文章主要介绍了数据结构-栈的运用-数的进制转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

对于进制转换,其实是具有以下最初的思想

1-输入某一个十进制的数值

2-选择你所要进行的进制转换类型

3-将这个数的来进求余进制数并保留在数组中

4-将十进制的数字除以进制数

5-这是一个循环,直至该数小于零则结束

6-然后再让数组进行反向输出就能得到你所要转换的二进制

do{

a[count++]=x%p;

x=x/p;

}while(x!=0);

#include <stdio.h>
int main(){
	int x,p; //x为十进制数,p为目标进制大小 
	scanf("%d",&x);
	scanf("%d",&p);
	int a[100]; //存放余数 
	int count=0;
	do{
		a[count++]=x%p;
		x=x/p;
	}while(x!=0);//当商不为0时进行循环 
	
	for(int i=count-1;i>=0;i--){
		printf("%d",a[i]);
	}
} 

方法二 (其实原理是一样的,一样是求基取余)

#include<stdio.h>
int main(){
	int A,B,sum,i=0,radix,c[31];
	scanf("%d %d %d",&A,&B,&radix);
	sum=A+B;
	if(sum==0)//考虑两者相加为0的情况。 
		printf("0");
	while(sum>0){
		c[i++]=sum%radix;  //十进制转其他进制,用除基取余法
		sum/=radix;   //(不断用商除以基数,然后倒序排列余数)
	}
	for(--i;i>=0;i--)
		printf("%d",c[i]);	
	return 0;
}

 方法三(传统的做法)

分析:这个做法的原理是去定义一个空的数组,以及定义一个函数,然后当你把所有的十进制二进制都输入完之后开始去调用函数,然后进入函数第一件事情是进行判断,如果你是0,哪个直接被覆盖掉,如果不是继续往下走,然后就用到递归,多次调用,直至再次传入这个函数中的数值为0然后进行返回。

在此涉及到以下的函数

这些函数的头文件是#include <string.h>

strlen :计算字符串的长度,作用类似于sizeof

strcpy:这个函数是可以用后续的将(s,"")的后覆盖前。

convto(s, n / b, b);  //递归函数
    len = strlen(s);  //计算字符串的长度
    s[len] = bit[n % b]; //求余
    s[len + 1] = '\0'; //因为字符串的结尾要是空

#include <stdio.h>
#include <string.h>
void convto(char* s, int n, int b);
int main(void) {
	char s[80]; //数组
	int  base, old;
	printf("请输入十进制数:");
	scanf("%d", &old);
	printf("请输入转换的进制:");
	scanf("%d", &base);
	convto(s, old, base);
	printf("%s\n", s);
	getchar();
	return 0;
}
void convto(char* s, int n, int b) {
	char bit[] = { "0123456789ABCDEF" };
	int len;
	if (n == 0) {
		strcpy(s, ""); //这个是用空覆盖
		return;
	}
	convto(s, n / b, b);
	len = strlen(s);
	s[len] = bit[n % b];
	s[len + 1] = '\0';
}

第四种方法:数据结构栈来进行进制转化

看着是很复杂吧,但是对于栈的构建完成后这个其实是不复杂的。

如果不了解栈,那么就去我的另一篇文章了解一下吧

 栈的初步了解及其运用https://blog.csdn.net/m0_61196970/article/details/125859630?spm=1001.2014.3001.5502

那么对于这个进制的转换 其实核心也是这个

就是当你传入的N然后来进行求余,之后你去判断它是否为空,但是这些的判断都是基于函数上的判断的,同时在栈中进行的。

void  conversion(int N, int d) {
   // int c;
    SeqStack s;
    Elemtype t;
    Init_SeqStack(&s);
    while (N) {
        Push_SeqStack(&s, N % d);
        N = N / d;
    }
    while (!Empty_SeqStack(&s)) {
        Pop_SeqStack(&s, &t);
        printf("%d",t);
    }

}

代码如下 

#include<stdio.h>
#define MAXSIZE 30
typedef int Elemtype;
typedef struct {
    Elemtype data[MAXSIZE];
    int top;
}SeqStack;
SeqStack* s;
void Init_SeqStack(SeqStack* s) {

    s->top = -1;
}
int Empty_SeqStack(SeqStack* s) {
    if (s->top == -1)
        return 1;
    else
        return 0;
}
void Push_SeqStack(SeqStack* s, Elemtype t) {
    if (s->top == MAXSIZE - 1);
    else{
    s->top++;
    s->data[s->top] = t;
    }
}
void Pop_SeqStack(SeqStack* s, Elemtype* t) {
    *t = s->data[s->top];
    s->top--;
}
void pananl()
{
    puts("选择以下操作\t");
    printf("\t 1:转换后的二进制:\t\n");
    printf("\t 2:转换后的四进制:\n");
    printf("\t 3:转换后的八进制:\n");
    printf("\t 4:转换后的十六进制:\n");
    printf("\t 5:转换后的三十二进制:\n");
    printf("\t 6:转换后的六十四进制:\n");
    printf("\t 7:输出所有进制:\n");
}
void  conversion(int N, int d) {
   // int c;
    SeqStack s;
    Elemtype t;
    Init_SeqStack(&s);
    while (N) {
        Push_SeqStack(&s, N % d);
        N = N / d;
    }
    while (!Empty_SeqStack(&s)) {
        Pop_SeqStack(&s, &t);
        printf("%d",t);
    }

}
int main() {
    int n, d,i,j=2;
    printf("请输入十进制N的值:");
    scanf("%d", &n);
    pananl(); //这是哪个屏幕
    printf("请输入你的选择:");
    scanf("%d", &d);
    switch (d) {
    case 1:printf("%d的%d的进制是:",n,2);
          conversion(n, 2); break;
    case 2:printf("%d的%d的进制是:", n, 4);
        conversion(n, 4); break;
    case 3: printf("%d的%d的进制是:", n, 8);
        conversion(n, 8); break;
    case 4:printf("%d的%d的进制是:", n, 16);
        conversion(n, 16); break;
    case 5:printf("%d的%d的进制是:", n, 32);
        conversion(n, 32); break;
    case 6:printf("%d的%d的进制是:", n, 66);
        conversion(n, 64); break;
    case 7: printf("%d的2 4 8 16 32 64进制是分别是:\n", n);
        for(i=1;i<=6;i++){
            conversion(n, j);
            j = j * 2;
            printf("  ");
            if (i == 6) break;
        }

    }

    return 0;
}

这是我的一个小的想法,其中第一段的代码引用了另外一个靓仔

以上便是我的分享的了,如果够更好地想法欢迎在下边评论留言。文章来源地址https://www.toymoban.com/news/detail-734683.html

到了这里,关于数据结构-栈的运用-数的进制转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构——利用栈来实现进制转换

    1. 顺序栈实现十进制转换二进制

    2024年02月06日
    浏览(31)
  • 数据结构上机实验——栈和队列的实现、栈和队列的应用、进制转换、约瑟夫环问题

      1.利用栈的基本操作实现将任意一个十进制整数转化为R进制整数。   2.利用循环队列实现.约瑟夫环问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到k的那个人出圈;他的下一个人又从1开始报数,数到k的那个人出圈;依

    2024年02月08日
    浏览(31)
  • 数据结构:栈的概念及栈的实现

    目录 1.栈的概念及结构 2.栈的实现  2.1  初始化栈 2.2 入栈  2.3 出栈  2.4 获取栈顶元素 2.5 获取栈中有效元素个数   2.6  检测栈是否为空,如果为空返回非零结果,如果不为空返回0 2.7 销毁栈  3. 完整代码 test.c  Stack.h Stack.c   栈(后进先出,先进后出) : 一种 特殊

    2024年02月01日
    浏览(33)
  • 数据结构 栈的概念及栈的实现

    目录 1.栈的概念及结构 2.栈的实现  2.1  初始化栈 2.2 入栈  2.3 出栈  2.4 获取栈顶元素 2.5 获取栈中有效元素个数   2.6  检测栈是否为空,如果为空返回非零结果,如果不为空返回0 2.7 销毁栈  3. 完整代码 test.c  Stack.h Stack.c   栈(后进先出,先进后出) : 一种 特殊

    2024年01月21日
    浏览(39)
  • 【数据结构】:栈的实现

    栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶 出栈:栈的删除操作叫做

    2024年02月07日
    浏览(24)
  • 【数据结构】栈的详解

    ☃️个人主页:fighting小泽 🌸作者简介:目前正在学习C语言和数据结构 🌼博客专栏:数据结构 🏵️欢迎关注:评论👊🏻点赞👍🏻留言💪🏻 栈:一种特殊的 线性表 ,其只允许在 固定的一端 进行 插入和删除元素 操作。进行数据插入和删除操作的一端称为 栈顶 ,另一

    2024年02月05日
    浏览(48)
  • 【数据结构】栈的实现

    栈:是一种受限制的线性表,即只能在尾部进行插入、删除的线性表,而且是一种先进后出的数据结构。尾部这一端又叫做栈顶,另一端叫做栈底。 入栈:向一个栈内插入元素叫做入栈或压栈,它把新元素放到栈顶元素的上面,是它成为新的栈顶元素。 出栈:在栈内删除元

    2024年02月01日
    浏览(27)
  • 数据结构-栈的实现

    栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的 一端称为栈顶,另一端称为栈底 。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈, 入数据在栈顶。 出栈:栈的删除操

    2024年02月05日
    浏览(36)
  • 数据结构---栈的实现

    前言 一、什么是栈? 二、 栈的实现 1. 栈的结构 2. 栈的接口实现过程 总结 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是

    2024年02月02日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包