B. Multiply by 2, divide by 6
题意:输入一个数n,判断是否能通过乘以2,除以6,把该数变成1。如果不能,输出-1;如果可以变成1,请输出从n变成1的次数。
题解:可以乘以2,也可以除以6。除以6可以看作除以2和除以3,于是我们也可以通过乘以2,把除以6变成除以3。那么我们可以求该数是否能够通过除以2和除以3得到1,如果不能得到1或者需要的2,比需要的3的个数多时,也不行。(因为除以2,只能通过除以6得到,在除以2的同时,也会除以3。我们没有办法消除多余的3.)如果满足条件的话,我们可以通过求出来的2的个数和3的个数得到答案。
ACcode:
int main()
{
int t;
int n;
cin >> t;
while (t--)
{
int sum3 = 0, sum2 = 0;
cin >> n;
int x;
x = n;
//分解出2,3;
while (x % 2 == 0)
{
x = x / 2;
sum2++;
}
while (x % 3 == 0)
{
x = x / 3;
sum3++;
}
if (x > 1 || sum2> sum3)
{
cout << -1 << endl;
}
else
cout << (sum3 - sum2 )+ sum3 << endl;//括号里的数表达的是3和2个数之差,就是需要乘以2多少次,得到单独的除以3,3的个数就是除以2和除以3同时进行的次数。
}
return 0;
}