进制转换

栈的应用进制转换

话不多说直奔主题

1.二进制转换为10进制

首先看二进制数:101010

计算方式是:从左到右(低位到高位)以此0*2^0+1*2^1+0*2^2+1*2^3+0*2^4+1*2^5=2^1+2^3+2^5=42

算法:将你输入的二进制数一次入栈,然后再一次出栈进行sum=sum+(e-48)pow(2,i);这么一个转换。这里的sum就是计算转换后的数字的总和,e为出栈的数字,为什么要-48呢,因为我的是char字符的输入要将它转换为真正的1或者0,pow(2,i),是计算2^i,现在就很好理解这段代码了吧。接下来贴代码

void Convert()
{
	char input;
	int len;
	int i = 0,sum=0;
	char e;
	stack stack3;
	Initstack(&stack3);
	printf("请输入你要转换的二进制数,按#号键结束:");
	scanf("%c", &input);
	while ('#' != input)
	{
		pushstack(&stack3, input);
		scanf("%c", &input);
	}
	len = getlen(stack3);
	for (i = 0; i < len; i++)
	{
		popstack(&stack3, &e);
		sum = sum + (e-48)*(int)pow(2, i);
	}
	printf("转后后的结果为:%d\n", sum);
}


2.二进制转换 为8进制

这个在二进制转换10的进制的基础上只需要要三位一转换就可以了



接下来贴代码:

void Convert()
{
	char input;
	int i = 0, j = 0;
	char e;
	stack stack3;
	stack stack4;
	Initstack(&stack3);
	Initstack(&stack4);
	printf("请输入你要转换的二进制数,按#号键结束:");
	scanf("%c", &input);
	while ('#' != input)
	{
		pushstack(&stack3, input);
		scanf("%c", &input);
	}
	for (j = 0; j < getlen(stack3)/3||getlen(stack3)!=0; i++)//判断是否进行几次转换
	{ 
		int sum = 0;
		for (i = 0; i < 3&&getlen(stack3) != 0; i++)//一次转几个数是否转换完
		{
			popstack(&stack3, &e);
			sum = sum + (e - 48)*(int)pow(2, i);
		}
		pushstack(&stack4, sum);
	}
	printf("转换后的结果:");
	while (getlen(stack4)!=0)
	{
		popstack(&stack4,&e);//取出保存的结果
		printf("%d", e);
	}
	printf("\n");
}

3.10进制转换为二进制

这里直接用原始的方法就可以了


代码如下:

void test()
{
	int input;
	stack stack;
	Initstack(&stack);
	printf("请输入你要转换的十进制数:");
	scanf("%d", &input);
	do
	{
		int sum = 0;
		int n = 0;
		sum = input % 2;
		input /= 2;
		pushstack(&stack, sum);
	} while (input != 0);
	int len = getlen(stack);
	int count = 0;
	printf("转换后的二进制为");
	for (int i = 0; i < len; i++)
	{
		
		popstack(&stack, &input);
		printf("%d",input);
		count++;
	}
	printf("\n");
	printf("共计:%d位", count);
	printf("\n");
}

以上就是几种简单的栈的应用--进制转换。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值