我们可以通过对一个整数A进行加1操作或者乘2操作使其转换为另一个整数B。
给出两个整数X,
Y,计算至少需要多少步才能将X转换为Y。.
3
1 1
3 10
2 11
0
3
4
//从y到x逆向考虑,注意用long long
#include<cstdio>
long long a,b;
void solve()
{
long long ans=0;
while(a<b)
{
if(a>b/2)
{
ans+=b-a,b=a;//a>b/2那么a变成b只能是一个个加1
}
else
{
if(b%2) ans+=2,b/=2;//b%2的余数不等于0那么a必须先加1,在乘以2
else ans++,b/=2;
}
}
printf("%lld\n",ans);
}
int main()
{
int t,i;
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld",&a,&b);
solve();
}
return 0;
}
原文:http://blog.csdn.net/u012773338/article/details/39030179