欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

编程题(懂二进制)

程序员文章站 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=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;
    }
}

编程题(懂二进制)

编程题(懂二进制)

编程题(懂二进制)

相关标签: 二进制 编程