我们可以通过对一个整数
A 进行加1操作或者乘2操作使其转换为另一个整数
B
。
Output
Sample Input
Sample Output
Hint
给出两个整数
X ,
Y ,计算至少需要多少步才能将
X 转换为
Y 。
.
Input
输入的第一行包含一个整数
T (1
≤ T
≤ 5
00 ),表示一共有
T 组测试数据。
每组测试数据占一行,包含两个整数
X ,
Y (1
≤ X
≤ Y
≤ 10
18 )。
对于每组测试数据,输出至少需要多少步才能将
X 转换为
Y
。
3
1 1
3 10
2 11
0
3
4
对样例2的解释:只需3步即可将3转换为10:
3 ->
4 ->
5 ->
10 。
对样例3的解释:只需4步即可将2转换为11:
2 ->
4 ->
5 ->
10 ->
11 。
用一个while循环,从后往前推,每次都把Y转化为偶数,再除二,每进行一次操作操作数加一,直到y<2*x,接下来都只能用+1操作了。
#include<iostream>
using namespace std;
int main()
{
int T;
long x,y,ans;
cin>>T;
while (T--)
{
ans=0;
cin>>x>>y;
while (2*x<=y)
{
if ((y%2)==1) ans++;
y=y/2;
ans++;
}
if (x!=y) ans=ans+y-x;
cout<<ans<<endl;
}
return 0;
}
216

被折叠的 条评论
为什么被折叠?



