微众银行 笔试 9.13 第二题

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for (int i = 0; i < n; i++) {
            int res = 0;
            long a = sc.nextLong();
            long b = sc.nextLong();
            // 令a是大的那个;
            if (a == b) {
                System.out.println(0);
                continue;
            } else if (a < b) {
                long temp = a;
                a = b;
                b = temp;
            }
            while (a % 8 == 0 && a / 8 >= b) {
                a /= 8;
                res++;
            }
            while (a % 4 == 0 && a / 4 >= b) {
                a /= 4;
                res++;
            }
            while (a % 2 == 0 && a / 2 >= b) {
                a /= 2;
                res++;
            }
            if (a == b) {
                System.out.println(res);
            } else {
                System.out.println(-1);
            }
        }
    }
}
#微众银行23秋招笔试,是我太菜了#
全部评论
求个第一题答案
1 回复
分享
发布于 2022-09-13 22:43 福建
跟你差不多,卡在了45,能帮忙看看吗。a=b的时候,0和2都试了,没啥变化
点赞 回复
分享
发布于 2022-09-13 22:22 浙江
滴滴
校招火热招聘中
官网直投
{"pureText":"","imgs":[{"width":"1440.0","src":"https://uploadfiles.nowcoder.com/images/20220913/643719310_1663078968944/D1B5863472A4AA3FC1A0BB1E6C1AE411","height":"2382.0","alt":"oQzg5NeeMKkqsJ0eyawlotOshyAXODyu.jpg"}]}
点赞 回复
分享
发布于 2022-09-13 22:22 浙江
这个没必要转换,直接做乘法和除法就行,除法while判断每次能否除尽2
点赞 回复
分享
发布于 2022-09-13 22:39 陕西
简单dfs
点赞 回复
分享
发布于 2022-09-13 23:05 广东
第二题用二进制移位来算,如 3:11     6: 110    , 所以如果要满足能通过移位出来结果,需要s1.startWith(s2) 且 后面的都是 0 ,之后计算0的数量 num  , 答案就是 num % 3 == 0 ? num / 3 : (num / 3 + 1)
点赞 回复
分享
发布于 2022-09-14 11:27 广东
兄弟,******,从此秋招不迷路
点赞 回复
分享
发布于 2022-09-14 16:21 澳大利亚

相关推荐

2 8 评论
分享
牛客网
牛客企业服务