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");
}
}```