今天做蓝桥杯基础练习时总结出来的方法,写出来用以记录:
蓝桥杯练习系统基础练习BASIC-2 01字串
第一种:利用for循环的嵌套实现
#include<iostream>
using namespace std;
int main()
{
for (int a = 0; a < 2;a++)
{
for (int b = 0; b < 2; b++)
{
for (int c = 0; c < 2; c++)
{
for (int d = 0; d < 2; d++)
{
for (int e = 0; e < 2; e++)
{
cout << a << b << c << d << e << endl;
}
}
}
}
}
}
本质上是罗列了所有5位的二进制数,每个二进制数占一行。每一个for循环控制5位二进制数的其中一位的大小,模拟了二进制数的进位规则。
优点:简单易得,加深了对for循环结构的理解。
缺点:只能罗列,不能完成十进制对二进制的转换。
第二种:利用bitset函数实现十进制向二进制的转换
#include<iostream>
#include <bitset> //把十进制转换位二进制
using namespace std;
int main()
{
for (int i = 0; i < (1 << 5); i++)
{
cout << bitset<5>(i) << endl;
}
return 0;
}
利用这个方法需要包含头文件
#include<bitset>
语法:
bitset<二进制数的位数>(十进制数)//直接输出
bitset<5>(i);
补充:
(1)bitset函数的用法(c++)
目前只用到上述一种情景,遇到其他的再补充叭,csdn上直接搜“bitset c++ 用法”会有一个大佬写的很详细,需要的友友可以去找找~
(2)(1<<5)
这里的<<是左移运算符
1<<5就相当于1*(2^5)
<<就相当于乘法
与之相对的右移运算符>>就相当于除法
32>>4就相当于32/2^4
优点:个人认为这是最简便的方法来进行转换了,不单可以设定二进制数的位数,还可以指哪打哪地进行转换,而且只需要包含一个头文件,调用一个函数就可以实现。bitset函数的功能远不止于此,甚至可以进行余位补零等操作,十分方便。遇到实际案例我再来补全用法。(此外不知道还有没有更简便的方法。)
缺点:暂时还没发现hhh
第三种:利用数学里算十进制转二进制的方法
#include <iostream>
using namespace std;
int main()
{
for(int i=0;i<32;i++){
cout<<i%32/16<<i%16/8<<i%8/4<<i%4/2<<i%2<<endl;
}
return 0;
}
这种方法本质上是对数学上用除法进行十进制到二进制转换的计算过程的程序再现,利用for循环遍历32各5位二进制数。
优点:非常好理解,如果会基本的十进制转二进制方法,也比较容易想到。困难之处可能在于这种写法是从第32个十进制数--31开始找规律得出。
缺点:不够灵活。
一起继续加油学习叭!