求正整数A和正整数B的二进制表示中有多少位是不同的
2015-07-29 17:28
288 查看
思想:将A和B相与后,求与后二进制串中1的个数。其代码如下
运行结果如下:
#include "stdafx.h" #include<iostream> #include<Windows.h> using namespace std; int main() { int n,A,B; int number(BYTE a,BYTE b); cout<<"输入正整数A的值:"; cin>>A; cout<<endl; cout<<"输入正整数B的值:"; cin>>B; cout<<endl; n=number(A,B); cout<<"正整数A和B的二进制中表示中有"<<n<<"位是不同的"<<endl; return 0; } /* //方法一,判断A和B相异或之后的二进制串中1的个数。 //模2,余数为1,个数加1。再右移,直到v=0;时间复杂度为log2(v) int number(BYTE v1,BYTE v2){ int num=0; BYTE v; v=v1^v2 while(v){ if(v%2==1)num++; v=v>>1; //v=v/2; } return num; } */ /* //方法二:判断A和B相异或之后的二进制串中1的个数。 //最后一位与1&,如果结果是1,二进制中1的个数加1.时间复杂度为log2(v)。 int number(BYTE v1,BYTE v2){ int num=0; BYTE v; v=v1^v2; while(v){ num+=v&0x01; v=v>>1; } return num; } */ //方法三:判断A和B相异或之后的二进制串中1的个数。 //循环次数等于二进制中1的个数。v&(v-1),每与一次,1的个数减1.时间复杂度为n(m),m为1的个数。 int number(BYTE v1,BYTE v2){ int num=0; BYTE v; v=v1^v2; while(v){ v&=(v-1); num++; } return num; }
运行结果如下:
相关文章推荐
- usb debug上层相关知识
- hdu1863
- Christine Daaé
- 这是一道BFS入门题
- 元组(tuple)、列表[list]的区别
- JAVA自学路线图
- VC7(VS2002)调试时 std::string 超过15字符乱码问题
- “/”应用程序中的服务器错误
- Xutils框架-HTTP使用详解
- HDU 5318 The Goddess Of The Moon(矩阵快速幂)
- hd1856 More is better
- Oracle 查看收集统计信息
- javascript理解参数
- hadoop
- 【CSS学习】CSS Id 和 Class
- asp.net出现的异常:"由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值" 的解决方法
- [html5]离线存储
- Java 划分排序
- Core Animaiton - 7
- UnicodeEncodeError: 'gbk' codec can't encode character ...