C - 佑子的难题

C - 佑子的难题
Description
有一天,佑子在杂志上找到了一个有趣的问题:有一个数 n,在一步中,可以将这个数乘 2,或是除以 6(如果这个数可以被 6 整除)

使数 n 变为 1 所需的最小操作数是多少。佑子找到了麻衣,想要在这个问题上一决高下,先解出这个问题的人获胜。

由于众所周知的原因,佑子无法在任何比赛中赢过麻衣,但佑子也不是输了就放弃的类型。所以麻衣为了尽早结束这地狱般的比赛,找到了热爱编程的你,并希望你帮助佑子快速解出这个问题的答案。

Input
第一行包含一个整数T,表示有T组数据(1 <= T <= 100000)

接下来T行每行包含一个整数n(1 <= n <= 1e9)

Output
输出共有 T 组,每行一个答案,表示通过给定步骤使 n 变为 1 的最小操作数(如果无法变为 1 则输出 -1)

Sample
Input
6
1
2
3
12
12345
15116544
Output
0
-1
2
-1
-1
12
Hint
第三个样例中n = 3

1、n * 2 = 6

2、n / 6 = 1

故答案为2

#include <bits/stdc++.h>
using namespace std;

int main() {
    int T, ans, x;
    cin >> T;
    while (T--) {
        cin >> x;
        ans = 0;
        while (x % 6 == 0) {
            x /= 6;
            ans++;
        }
        while (x % 3 == 0) {
            ans += 2;
            x /= 3;
        }
        if (x == 1)
            cout << ans << '\n';
        else
            puts("-1");
    }
}```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值