编程题(懂二进制)

题目描述
世界上有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=0int 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;
    }
}

运行结果

运行结果

运行结果

发布了91 篇原创文章 · 获赞 36 · 访问量 3万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览