题解 | #牛群的数量计算#

牛群的数量计算

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;
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务