Week10——A - 签到题

题目

东东在玩游戏“Game23”。
在一开始他有一个数字n,他的目标是把它转换成m,在每一步操作中,他可以将n乘以2或乘以3,他可以进行任意次操作。输出将n转换成m的操作次数,如果转换不了输出-1。

Input

输入的唯一一行包括两个整数n和m(1<=n<=m<=5*10^8).

Output

输出从n转换到m的操作次数,否则输出-1.

Simple Input 1

120 51840

Simple Output 1

7

Simple Input 2

42 42

Simple Output 2

0

Simple Input 3

48 72

Simple Output 3

-1

思路

该题转化为将数字除以前一个数后再不断对结果除3和除2若能除尽说明满足条件,否则不满足。

代码

#include<iostream>
using namespace std;
int main()
{
    
    
 int n,m,cnt=0;
 cin>>n>>m;
 if(m%n!=0)
  cout<<"-1"<<endl;
 else
 {
    
    
  m=m/n;
//  cout<<m<<endl;
  while(m%2==0)
  {
    
    
   cnt++;
   m=m/2;
//   cout<<m<<endl;
  }
  while(m%3==0)
  {
    
    
   cnt++;
   m=m/3;
//   cout<<m<<endl;
  }
  if(m!=1)
   cout<<"-1"<<endl;
  else
   cout<<cnt<<endl;
  
 }
 
 return 0;
 } 

猜你喜欢

转载自blog.csdn.net/alicemh/article/details/105728080