简单题目

该博客介绍了一个简单的数学问题,即如何通过乘以2或3将一个数字n转换为另一个数字m,并给出操作次数。文章提供了输入输出示例和解题思路,涉及判断是否能完成转换以及计算转换步数的方法。当b/a不能整除时输出-1,否则通过连续除以2和3计算转换步数(ans),最后输出ans或-1。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:
开始他有一个数字n,他的目标是把它转换成m,在每一步操作中,他可以将n乘以2或乘以3,他可以进行任意次操作。输出将n转换成m的操作次数,如果转换不了输出-1。
输入:
输入的唯一一行包括两个整数n和m(1<=n<=m<=5*10^8).
输出:
输出从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
解题思路:
非常简单的题目,抓住b/a,若不能整除,直接输出-1,若能整除,一次次除以2再一次次除以3直到不能整除为止,这个过程中记录ans,若最后为1,则输出ans,否则表示不能转换,输出-1.
参考代码:

#include <iostream>
using namespace std;
int a,b;
int ans=0;
int main(int argc, const char * argv[]) {
    cin>>a>>b;
    if(b%a==0){
        int x=b/a;
        while (x%2==0) {
            x/=2;
            ans++;
        }
        while (x%3==0) {
            x/=3;
            ans++;
        }
        if(x==1)cout<<ans<<endl;
        else cout<<-1<<endl;
    }
    else cout<<-1<<endl;
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值