给出两个整数 X , Y ,计算至少需要多少步才能将 X 转换为 Y 。
Input
输入的第一行包含一个整数 T (1 ≤ T ≤ 5 00 ),表示一共有 T 组测试数据。
每组测试数据占一行,包含两个整数 X , Y (1 ≤ X ≤ Y ≤ 10 18 ).
Hint
对样例2的解释:只需3步即可将3转换为10: 3 -> 4 -> 5 -> 10 。
对样例3的解释:只需4步即可将2转换为11: 2 -> 4 -> 5 -> 10 -> 11 。
重在思路。在此感谢孙同学帮助。整体思路是对大数y一直除以2直到y<x,然后退后一步,做减1的操作直到y=x。
AC代码
#include<iostream>
using namespace std;
int main()
{
int T;
long long int x,y;
cin>>T;
while(T--)
{
long long int j=0;
cin>>x>>y;
while(y>x)
{
if(y%2==0)
{
y=y/2;
j++;
}
else
{
y=(y-1)/2;
j+=2;
}
}
if(y==x) cout<<j<<endl;
else{
y=y*2; j--;
j+=y-x;
cout<<j<<endl;
}
}
return 0;
}
End