问题:给定两个正整数(二进制形式表示)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的二进制表示中有多少位不同
最新推荐文章于 2022-06-09 20:15:41 发布