Description
LZY平时非常懒,他经常要计算一些数字,他为了偷懒于是去商店购买了一台计算器。老板WLJ欺负他个子小不能打,于是卖了一台残次品给他。这台残次品计算器只能进行两个操作:
双倍(Double):将显示屏上的数字乘 2;
递减(Decrement):将显示屏上的数字减 1 。
最初,计算器显示数字 A。
现在请你帮帮LZY,返回显示数字 B 所需的最小操作数。
Input
样例输入由多组测试数据组成。
每组测试数据第一行输入两个正整数A ( 1 <= A <= 10^9 ) 和 B ( 1 <= B <= 10^9 )
utput
输出由A变成B的最小操作次数
Sample Input
2 3
5 8
3 10
1024 1
Sample Output
2
2
3
1023
思路
在最外面一个大while里面一个判断a>=b是的话a-b后输出结束本次循环,a<b的话再一个while循环条件(b>a)//因为我是不动a,让b进行变化b/2或者b+1,奇数+1,偶数/2,进行一次记录一次最后在不满足第二个while后将记录的总次数+变化后的a-b输出结束次数。
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
long long a,b,cout;
while(~scanf("%ld %ld",&a,&b)){
cout=0;
if(a>=b){
cout=a-b;
printf("%d\n",cout);
continue;
}
while(b>a){
if(b%2==0){
b/=2;
}
else{
b++;
}
cout++;
}
cout+=(a-b);
printf("%d\n",cout);
}
return 0;
}