4

#yyds干货盘点# 解决名企真题:懂二进制

 2 years ago
source link: https://blog.51cto.com/u_15488507/5505507
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

#yyds干货盘点# 解决名企真题:懂二进制

原创

97的风 2022-07-22 18:25:12 博主文章分类:面试题 ©著作权

文章标签 整型 自定义 返回结果 文章分类 Java 编程语言 阅读数151

1.简述:

描述

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

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

2.代码实现:

import java.util.*;


public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param m int整型
* @param n int整型
* @return int整型
*/
public int countBitDiff (int m, int n) {
// write code here
return compareString(decimalToBinary(m), decimalToBinary(n));
}

// 自定义一个函数,用于将一个十进制整数转换为二进制
public String decimalToBinary (int num) {
StringBuffer binary = new
StringBuffer(""); // 定义一个 StringBuffer,用于存放最终返回的二进制数
while (num != 0) {
binary.append(num % 2);
num /= 2;
}
binary.reverse();
return new String(binary);
}

public int compareString (String str1, String str2) {
int len1 = str1.length(); // 获取 str1 的长度
int len2 = str2.length(); // 获取 str2 的长度
int ml = Math.max(len1, len2); // 获取 str1 和 str2 中长度最大的一个
while (str1.length() != ml) {
str1 = "0" + str1; // 在 str1 的头部补 0
}
while (str2.length() != ml) {
str2 = "0" + str2; // 在 str2 的头部补 0
}
int res = 0; // 定义一个整型变量,用于存放最终的返回结果
for (int i = 0; i < ml; i++) {
if (str1.charAt(i) != str2.charAt(i)) {
res++;
}
}
return res;
}
}
  • 收藏
  • 评论
  • 分享
  • 举报

Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK