题目大意
东东在玩游戏“Game23”。在一开始他有一个数字n,他的目标是把它转换成m,在每一步操作中,他可以将n乘以2或乘以3,他可以进行任意次操作。输出将n转换成m的操作次数,如果转换不了输出-1。
输入
输入的唯一一行包括两个整数n和m(1<=n<=m<=5*10^8)。
输出
输出从n转换到m的操作次数,否则输出-1。
思路
该题思路十分简单,详见代码。需要注意的是,首先要判断一下 n 是不是可以整除m,如果不能,直接输出-1即可。之所以要做这样的判断,是因为在c++中两个整数相除结果仍然是整数,这会导致一些问题,比如n=2,m=5,最后应当输出-1而不是1。
完整代码
#include<iostream>
using namespace std;
int n, m;
int main ()
{
cin>>n>>m;
if(m / n * n != m) cout<<-1<<endl;
else
{
int x = m / n;
int cnt=0;
while(x > 1 && x%2==0) x /= 2, cnt += 1;
while(x > 1 && x%3==0) x /= 3, cnt += 1;
if(x == 1) cout<<cnt<<endl;
else cout<<-1<<endl;
}
return 0;
}