题解 | #牛群的数量计算#
牛群的数量计算
https://www.nowcoder.com/practice/dfafaa65a55040b3a4b65418db68949d
知识点:位运算。
分析:本题是位运算实现相乘,采用累乘相加的方法模拟乘。
首先要实现位运算相加,位运算相加考虑两点:只有进位操作(&+<<1)和没有进位操作(^),将两部分信息异或得到相加结果。
然后根据根据其中一个数的位信息,最后一位位为1则将相加,为0则不加,同时要将两数移位,一个数用来确定是否移位,另一个数是不断‘累乘’。
import java.util.*;
public class Solution {
public int multiply(int a, int b) {
if (a == 0 || b == 0) {
return 0;
}
int product = 0;
while (b > 0) {
if ((b & 1) > 0) {
product = add(product, a);
}
a = a << 1;
b = b >> 1;
}
return product;
}
// 迭代写法
public int add(int num1, int num2){
int sum = num1 ^ num2;
int carry = (num1 & num2) << 1;
while(carry != 0){
int a = sum;
int b = carry;
sum = a ^ b;
carry = (a & b) << 1;
}
return sum;
}
}
查看8道真题和解析