整数A和B的二进制表示中有多少位不同
2010-10-08 10:17
274 查看
问题:给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的? 思路:对于给定的两个数,从最低位开始扫描,分别找到A和B的第一个“1”出现的位置,n1和n2 1)n1==n2,将n1(n2)位置0,继续往高位找 2)n1<n2, 说明A的n1位为1,但B的n1位为0,num++;将A的n1位置0,继续寻找A的下一个1的位置 3)n1>n2, 同2)反之 程序: int count(int a, int b) { unsigned int n1,n2,num=0; n1=a-(a&(a-1)); n2=b-(b&(b-1)); while((n1!=0)&&(n2!=0)) { if(n1==n2) { a&=~n1; b&=~n2; n1=a-(a&(a-1)); n2=b-(b&(b-1)); } else { num++; if(n1<n2) {a&=(~n1);n1=a-(a&(a-1)); } else {b&=(~n2);n2=b-(b&(b-1)); } } } while(n1!=0) { num++;a&=(~n1);n1=a-(a&(a-1)); } while(n2!=0) {num++;b&=(~n2);n2=b-(b&(b-1)); } return num; } 复杂性分析:始终在追踪“1”,因此复杂性为O(V(A|B)),V(A|B)为A|B中的“1”的个数, |
相关文章推荐
- 求整数A和B的二进制表示中有多少位是不同?
- 整数A和B的二进制表示有多少位不同
- 给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?
- 求整数A和整数B的二进制表示中有多少位是不同的?
- 求正整数A和正整数B的二进制表示中有多少位是不同的
- 给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?
- 如何求整数A和B的二进制表示中有多少位不同?
- 整数A和B的二进制表示中有多少位是不同的
- 给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?
- 整数A和B的二进制表示中有多少位不同
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
- c语言:输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?(异或的用法)
- C语言:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同(模除、移位)
- 二进制中1的个数,二进制奇偶位的二进制序列,一个整数的每一位,两个整数二进制中有多少个不同位
- 整数的二进制表示中有多少个1的问题
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
- 1.编程实现: 两个int(32位)整数m和n的二进制表达中, 有多少个位(bit)不同? 输入例子: 1999 2299 输出例子:7
- 28.整数的二进制表示中1的个数 题目:输入一个整数,求该整数的二进制表达中有多少个1。 例如输入10,由于其二进制表示为1010,有两个1,因此输出2。