#include <iostream>
using namespace std;
int main()
{
long long s , t , sum = 0;
scanf("%lld%lld" , &s , &t);
while ( s != t )
{
if ( t % 2 == 1 )
{
t--;
sum++;
}
else
{
t /= 2;
sum++;
if ( t < s )
{
t *= 2;
t--;
}
}
}
printf("%lld" , sum);
return 0;
}
扩展
根据这个题,也搜到了好多题
比如 给定两个正整数n,m,每次只能对n加1、减1、乘2,求n变为m的最小步数
比如 给定一个正整数n,每次只能对n加1或者乘2,求1变为n的最小步数
其实道理都是差不多的。只不过要多考虑一些情况。
和斐波那契数列类似,一个是加1加2,一个是加1乘2