題目描述
LZY平時非常懶,他經常要計算一些數字,他爲了偷懶於是去商店購買了一臺計算器。老闆WLJ欺負他個子小不能打,於是賣了一臺殘次品給他。這臺殘次品計算器只能進行兩個操作:
雙倍(Double):將顯示屏上的數字乘 2;
遞減(Decrement):將顯示屏上的數字減 1 。
最初,計算器顯示數字 A。
現在請你幫幫LZY,返回顯示數字 B 所需的最小操作數。
輸入
樣例輸入由多組測試數據組成。
每組測試數據第一行輸入兩個正整數A ( 1 <= A <= 10^9 ) 和 B ( 1 <= B <= 10^9 )
輸出
輸出由A變成B的最小操作次數
樣例輸入 Copy
2 3
5 8
3 10
1024 1
樣例輸出 Copy
2
2
3
1023
解題思路
如果A>=B,則直接輸出A-B,如果A<B,只要B>A就循環跑,B如果是偶數就除2.如果是奇數就加1,一直到A<=B爲止,然後輸出循環的次數sum+=A-B;
#include<bits/stdc++.h>
using namespace std;
int main(){
long long n,m,sum;
while(~scanf("%lld%lld",&n,&m)){
if(m<n){
printf("%lld\n",n-m);
}
else{
sum=0;
while(m!=n){
if(m<n){
sum+=n-m;
m=n;
break;
}
if(m%2!=0){
m++;
}
else{
m/=2;
}
sum++;
}
printf("%lld\n",sum);
}
}
return 0;
}