微众银行 笔试 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 澳大利亚

相关推荐

01-16 18:34
四川大学 Java
欢迎加入AI:没有啥稳定不稳定,一切都源于业务快速发展还是收缩。我当年一开始去的央企,业务不赚钱,也贼卷,慢慢就开始优化了。。。
点赞 评论 收藏
分享
01-24 04:44
门头沟学院 Java
数学转码崽:项目感觉有点简单,再加上学历不是92的话,大厂实习很难过筛吧,即使给几个面试,感觉也通过不了,还是放低预期,先去中厂沉淀吧,暑期实习可以试着冲大厂,如果非大厂不去的话,不如去考研,双非学历真的硬伤
点赞 评论 收藏
分享
评论
2
8
分享

创作者周榜

更多
牛客网
牛客企业服务