用一个整数判断是不2的整数次方

-----换句话说就是,判断2进制中1的个数是不是只有一个

2---10           4-100

8--- 1000   7 --0111  (n和n-1&的结果0)

6 ---110   5 ---101  (7的结果是1)

只有2次方的结果&才是0

代码如下

#include<bits/stdc++.h>
using namespace std;int main(){int n ;cin>>n;if(n>0&&((n & (n -1)) ==0)){cout<<"yes";}else{cout<<"no";}  return 0;}

当然,比较容易想到的就是对n取余

 while(!(n%2)){n = n/2;if(n==1){cout<<"yes";return 0;}}cout<<"no" ;

将整数的奇偶位互换

异或运算:相同为0 不同为1

相与运算:只有1&1=1其他情况全都为0

简单举例:9 --1001   ------0110--->6

用0 &就是消除,用1&就是保留原来的

思路来源:https://blog.csdn.net/etalien_/article/details/81179164

将一个二进制数(最后一位默认为第一位 也就是奇数位)的奇数位提取出来,像左移动一位,数的偶数位提取出来,向右移动一位,进而做异或,就可得到交换后的结果

1001

奇数提取 0001 左移 0010

偶数提取 1000 右移 0100

进行异或或者进行相加  0110

现在问题在于,如何进行奇偶位的提取:

用0 &就是消除,用1&就是保留原来的

奇数位: 奇数不变,偶数清0,那就让奇数位与1相与,偶数位与0相与:

这个二级制序列为   0101 0101 0101 0101 0101 0101 0101 0101===》0x55555555

同理偶数位:偶数不变,奇数清0, 那就让奇数位与0相与,偶数位与1相与:

这个二级制序列为  1010 1010 1010 1010 1010 1010 1010 1010 ===》0xAAAAAAAA

代码如下:

#include<bits/stdc++.h>
using namespace std;int main(){int n ;cin>>n;int tmp = ((((n)&0x55555555)<<1)+(((n)&0xAAAAAAAA)>>1));cout<<tmp;   return 0;} 

乘2挪整二进制表示浮点实数:

题目:给定一个介于0和1之间的实数(如 0.625)类型为double,打印他的二进制表示0.101
如果该数字无法精确地用32为以内的二进制表示默认error

需要注意的是:小数点后的二进制分别表示 0.5 、0.25、 0.125, 位向左移表示乘2,右移表示除2

这里与整数的8421规则类似又不同, 她是乘2,如果结果>=1, 表示的二进制数后写1 ,

乘2后<1, 表示的二进制数后写0;

举例子:0.625*2 =1.25==>0.1---------0.25

0.25*2 = 0.5==>0.10------------0.5

0.5*2 = 1.0==>0.101----------------------0

#include<bits/stdc++.h>
#include<string.h>
#include <iostream>
using namespace std;int main(){double n ;int count = 32;cin>>n;string a ="0.";while(n>0&&count--){n = n*2;int t = n; //n是double类型,int之后只剩整数,就可以判断,整数位示0还是1n =n-t; //将整数位抹去 ,继续进行*2 a+=(t+48); //ascll码从0开始是48 }  if(count>0){cout<<a<<endl;}else{cout<<"error";}return 0;} 

出现k次与出现一次:

题目:数组中只有一个数出现了1次,其他数都出现了k次,请输出,只出现一次的那个数

比较直接的就是暴力破解,进行计数排查

一个技巧点:2个2进制相加且不进位的结果为0,10个10进制的数相加不进位 结果为0

总结来说就是:k个k进制数相加不进位的结果为0;

本题思路,所有数进行k进制转换,然后做k进制的不进位加法,结果为0 ,进行排除,剩下的就是答案的k进制,然后再转成10进制

难点1:十进制转k进制 在java中integer.tostring(i,k);

难点2: k进制转十进制  a*k的(几次方)+ a*k的(1方)+a*k的(0方)

难点3:不进位加法:相加之后和 对k 取余,结果就是对应位上数值

代码:待完成

算法很美-位的奇巧淫计(c/c++)相关推荐

  1. 算法很美-位运算-找出落单的那个数

    上级目录:算法很美 1. 题目 一个数组里除了某一个数字之外,其他的数字都出现了两次.请写程序找出这个只出现一次的数字. 2. 异或思路 异或的运算是A ^ A=0,也就是说偶数个相同的元素异或,结果 ...

  2. 算法很美——数学问题

    算法很美--数学问题 题1:天平称重 问题描述: 用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量. 砝码重量分别是1,3,9,27,81--3的指数次幂,每种重量砝码只有一个 则它们可以 ...

  3. 算法之美 | 位运算的巧妙奥秘(一) | JAVA中位运算的深入浅出

    文章目录 前言 一.位运算符号 二.位运算的运算规则 扩展 前言 传智杯初赛后有感而写,我目前阶段所学习的算法,只是最基础的数学,对于数字和数学公式还是不敏感,在小卡与质数2那道题,解题的思路只有最基 ...

  4. 算法很美第一章 位运算的奇巧淫技

    第一章 位运算的奇巧淫技 1.2 题解:如何找数组中唯一成对的那个数 知识点: A^A=0 A^0=A(一个数与0进行按位异或,结果是他自己) 对一个序列进行按位异或,可以消除掉序列中的重复项,比如: ...

  5. 算法很美 将整数的奇偶位互换

    大家关注微信公众号 罡罡同学 回复蓝桥杯 可免费获得历年真题和C语言版的真题源代码 将整数的奇偶位互换 题目:将整数的奇偶位互换 (奇偶位:指二进制中的奇偶位) 例:9的二进制 1001,互换后为 0 ...

  6. 蓝桥杯:算法很美 笔记 3.查找和排序(Python实现)

    1.分治法介绍以及关键点解析 分治法(divide and conquer, D&C)∶将原问题划分成若干个规模较小而结构与原问题一致的子问题﹔递归地解决这些子问题,然后再合并其结果,就得到原 ...

  7. <<算法很美>>——(七)——DFS典题(二):数独游戏

    目录 问题描述 问题分析 放码过来: 问题描述 如[图1.png],玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一 行.每一列.每一个同色九宫内的数字均含1-9,不重复. 数 ...

  8. <<算法很美>>——(三)十大排序算法(上)

    目录 前言 冒泡排序 图解冒泡 代码实现 冒泡优化 选择排序 图解选排​ 代码实现 插入排序 图解插入 ​代码实现 希尔排序 图解希尔 ​代码实现: 归并排序 图解归并 ​代码实现 快速排序 图解快排 ...

  9. <<算法很美>>——(三)十大排序算法(下)

    目录 1. 奇数在左偶数在右 2. 最快效率求出乱序数组中第k小的数 3. 数组中有一个数字出现次数超过数组长度一半 4. 合并两个有序数组 5. 数组中的逆序对 6. 排序数组中两个数字之和 7. ...

最新文章

  1. hunnu---11547 你的组合数学学得如何?
  2. 利用matlab点云工具处理点云
  3. BitComet加速調整法---让你的BT飞起来!
  4. mysql 安装、建库、导入导出数据
  5. 【ZOJ4110】Strings in the Pocket (马拉车算法+分析)
  6. Android-EasyChart第二波饼图
  7. 欧几里得空间与希尔伯特空间
  8. 复现贪吃蛇程序——吃食物增加长度(最后一篇)
  9. shopex PHP Notice,Shopex系统配置文件config.php说明
  10. 一文读懂单点登录系统对企业的价值
  11. Tomcat控制台中文乱码怎么处理[已解决 绝对好用]
  12. c语言作业 分解质因数,深入分析C语言分解质因数的实现方法
  13. 我是如何从头写一篇顶级论文的
  14. Excel VBA操作网页 显示滚动进度条
  15. 12306列车时刻表查询api功能实现
  16. Power算法求X的N次幂
  17. Exception at 0x7fefd73a49d, code: 0xe06d7363: C++ exception, flags=0x1 (execution cannot be continue
  18. android wifi传图片,「教程」将Mac电脑上的照片无线传到安卓手机上
  19. 智源社区AI周刊No.101:DeepMind推出AlphaTensor登Nature封面;stateof.ai发布AI情况报告...
  20. 采用AT89C2051的智能时钟

热门文章

  1. mysql导入与导出(备份)
  2. 牛顿迭代法计算整数除法
  3. 计算机软考高级论文怎么写,软考高级论文写作的六大应试策略
  4. Win32高DPI编程总结
  5. 异常派生exceptions must derive from BaseException
  6. 建设小程序商城系统方式分享及优缺点分析
  7. android防止service多次执行onStartCommand
  8. 1505: 酷酷的单词
  9. Re-ID 2019 Review
  10. 二战超人之最-最有杀伤力的飞行员