首页 > 试题广场 >

懂二进制

[编程题]懂二进制
  • 热度指数:4620 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?
示例1

输入

3,5

输出

2

说明

3的二进制为11,5的二进制为101,总共有2位不同 
示例2

输入

1999,2299

输出

7
package main
import "strconv"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param m int整型 
 * @param n int整型 
 * @return int整型
*/
func countBitDiff( m int ,  n int ) int {
    s:=strconv.FormatInt(int64(m^n),2)
    ans:=0
    for _,ch:=range []byte(s){
        if ch=='1'{
            ans++
        }
    }
    return ans
}

发表于 2023-03-09 22:44:10 回复(0)
package main

import "strconv"
//import "fmt"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param m int整型 
 * @param n int整型 
 * @return int整型
*/
func countBitDiff( m int ,  n int ) int {
    mBinary := numTobinary(m, 2)
    nBinary := numTobinary(n, 2)
    size := len(mBinary)
    if size < len(nBinary) {
        size = len(nBinary)
    }
    mBinary = alignBit(mBinary, size)
    nBinary = alignBit(nBinary, size)
    
    ans := 0
    for i := 0; i < size; i++ {
        if mBinary[i] != nBinary[i] {
            ans++
        }
    }
    return ans
}

/**
* @desc 二进制数位对齐
*
* @param string binary
* @param int size
*
* @return string
*/
func alignBit(binary string, size int) string {
    if size == len(binary) {
        return binary
    }
    zeros := ""
    for i := 0; i < size - len(binary); i++ {
        zeros += "0"
    }
    
    return zeros + binary
}

/**
* @desc 进制转化

* @param int num 需要转化的十进制整数
* @param int dest 目标进制数

* @return string
*/
func numTobinary(num, dest int) string {
    res := ""
    for num > 0 {
        tmpNum := num % dest
        num /= dest
        res = strconv.Itoa(tmpNum) + res
    }
    return res
}
发表于 2022-07-29 08:56:04 回复(0)

问题信息

上传者:牛客301499号
难度:
2条回答 3848浏览

热门推荐

通过挑战的用户

查看代码
懂二进制