您的位置:首页 > 其它

世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?

2017-08-21 19:09 316 查看
世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?

示例1

输入

1999 2299


输出

7


这里我用两种方式(java):

第一种:

把两个整数直接转化为二进制,再对两个二进制进行比较,看有多少位不一样。不过要注意的是,因为转化后的二进制是字符串形式,所以在对二进制进行比较时,要把单个元素当成字符而不是数字。比如,判断一位是否是1,应该if(s.charAt(i)=='1')而不是if(s.charAt(i)==1)。

代码如下:

package sort;

import java.util.Scanner;

public class Solution {

public static void main(String[] args) {
// TODO Auto-generated method stub
Solution solution = new Solution();
Scanner reader = new Scanner(System.in);
int n = reader.nextInt();
int m = reader.nextInt();
System.out.println(solution.countBitDiff(n, m));
}

public int countBitDiff(int n, int m) {
int sum = 0;
String s1 = Integer.toBinaryString(n);
String s2 = Integer.toBinaryString(m);
int i, j;
for (i = s1.length() - 1, j = s2.length() - 1; i >= 0 && j >= 0; i--, j--) {
if (s1.charAt(i) != (s2.charAt(j)))
sum++;
}
if (i > j) {
while (i >= 0) {
if (s1.charAt(i--) == '1')
sum++;
}
} else {
while (j >= 0)
if (s2.charAt(j--) == '1')
sum++;
}
// sum += Math.abs(s1.length() - s2.length());
// 我终于明白了,原来是错在这里了,因为更大的那个数,多出来的那些二进制位也有很多是0,绝不可以都当做是1来算
// System.out.println(s1 + "\n" + s2);
return sum;
}
}第二种方法:
把两个整数进行异或计算,统计结果中有多少个1即可得出有多少位二进制位不同。代码如下:

package chang;

import java.util.Scanner;

public class Solution {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner reader=new Scanner(System.in);
int m=reader.nextInt();
int n=reader.nextInt();
Solution solution=new Solution();
System.out.println(solution.countBitDiff(m, n));
}
//这是网上的一种方法
// public int countBitDiff(int m, int n) {
// int sum = 0;
// int dif=m^n;
// System.out.println(dif);
// while(dif!=0){
// dif=dif&(dif-1);
// System.out.println(dif);
// sum++;
// }
// return sum;
// }

public int countBitDiff(int m, int n) {
int sum = 0;
int dif=m^n;
String s=Integer.toBinaryString(dif);
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='1')sum++;
}
return sum;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐