位运算中的进制转化模板及详细分析总结

基本数学思想:除奇取余,逆序输出(这里便要用到栈的思想了,类比高精运算结果的输出)

首先先介绍一下栈这个东西;

特点:先进后出

代码实现方式:结构体(可能有人觉得麻烦,但是以后工作的工程代码就是必须用结构体来表示栈) 

必要的内容:每次放的数据(数组来表示);top变量——top==0是结束的标志,等于0的数组下标不放任何数据;

struct stack
{
int data[1000];
int top
};
struct stack s;

 然后我们介绍一下二进制的转化代码模板 

#include<bits/stdc++.h> 
using namespace std;
struct stackk 
{
	int data[1000];
	int top;
};
struct stackk s;
int main()
{
	int n;cin>>n;
	while(n)                         
	{
		s.data [++s.top]=n%2;
		n/=2;
	}
	while(s.top)
	{
		printf("%d",s.data[s.top--]);
	}
	return 0;
}

 易错:本人while的条件那里总是容易写错,现在为了防止n这里出错给出一个标准,通常为n或者n>=0;(这里我们统一写n,s.top  )

十进制以内的转化

#include<bits/stdc++.h> 
using namespace std;
struct stackk 
{
	int data[1000];
	int top;
};
struct stackk s;
int main()
{
	int n,m;cin>>n>>m;
	while(n)                            
	{
		s.data [++s.top]=n%m;
		n/=m;
	}
	while(s.top)
	{
		printf("%d",s.data[s.top--]);
	}
	return 0;
}

终极版——16进制(有ABCD...这些牛马)

要点:对付ABCD...这些奇怪的位数——建立一个字符串数组(这里我们给它去个名字叫标准数组或者模板数组)

char str[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
s.data[++s.top]=str[n%m];

注意:int date[100]最好也改成char data[100];

#include<bits/stdc++.h> 
using namespace std;
struct stackk
{
	char data[100];
	int top;
};
struct stackk s;
char str[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int main()
{
	int n,m;cin>>n>>m;
	while(n)
	{
		s.data[++s.top]=str[n%m];
		n/=m;
	}
	while(s.top)
	{
		printf("%c",s.data[s.top--]);
	}
	return 0;
}

到这里基本结束了,最后再来一个小结;

打板子的易错地方:

①++s.top和s.top--的别写错了

②while循环那里我条件老写错,这里干脆定个标准——统一while(n>0)或者while(n)

算法原理的提炼:栈的先进后出思想

类比:用数组模拟计算结果的时候常常需要逆序输出,这里就需要用到栈的思想了

理由:下标为1的元素是最先计算出来的(如个位),而实际上要从top(最高位)输出才是合理的(我们用手在纸上也是这么去写的)这里就有栈的味道了

场景:位数的转化;高精结果的输出

其他运用:比如说题目考查我们可以把一个数分为2的多少次方之和,这里就可以借助2进制了,同理还可以衍生!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值