编程题(懂二进制)
程序员文章站
2024-03-12 16:54:50
...
题目描述
世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?
示例1:
输入:
1999 2299
输出:
7
我是思路:
1.n分为两种情况,一种情况是当n为0时,所有二进制位为0;第二种情况当n不为0时,需要求每个二进制位的数,也就是余数;同理m也是这么理解的
2.求出他们的二进制数(虽然是32位二进制数,但是结果是倒着的顺序得出的:比如4位二进制数,1的结果为1000(但其实是0001);但这不影响结果)
3.将他们的数组元素一一比较。不同则count+1
注意:当数组元素不赋值,默认值为0;
public class Solution {
/**
* 获得两个整形二进制表达位数不同的数量
*
* @param m 整数m
* @param n 整数n
* @return 整型
*/
public int countBitDiff(int m, int n) {
int yu,jin[]=new int[32],i=0;//定义余数yu;放置余数yu的数组jin【】;变量i=0;
int myu,mjin[]=new int[32],mi=0;定义余数myu;放置余数myu的数组mjin【】;变量mi=0;
int count=0;
if(n==0){//判断n是否为0;为0则数组元素值均为0;
for (int x : jin) {
x=0;
}
}
else{//当n不为0时,转换为二进制数;
while (n!=1) {//当n不为1时,可以不断求出余数,并放入数组中;
yu=n%2;
n=n/2;
jin[i]=yu;
i++;
}
jin[i]=1;//当n为1时不再求,则该元素为1;
}
if(m==0){//判断m是否为0;为0则数组元素值均为0;
for (int x : mjin) {
x=0;
}
}
else{//当m不为0时,转换为二进制数;
while (m!=1) {//当m不为1时,可以不断求出余数,并放入数组中;
myu=m%2;
m=m/2;
mjin[mi]=myu;
mi++;
}
mjin[mi]=1;//当m为1时不再求,则该元素为1;
}
for (int q=0;q<32;q++) {
if(jin[q]!=mjin[q]){
count=count+1;//二者相比较,不同时count+1;
}
}
return count;
}
}
上一篇: 逗女朋友开心的玫瑰花Java web程序
下一篇: 详解堆排序算法原理及Java版的代码实现