小Y上课无聊摸鱼,他在纸上随意写下了两个数字X和Y。现在他想把X通过某种方法变成Y,为了把让这个过程更加有趣,所以他限定自己只能使用两种操作:
1、把当前X乘二
2、把当前X减一
因为课堂上的时间有限,所以他用了最少的操作次数实现这一过程。下课后,路过的qz看到了小Y纸上写着的X和Y,他一秒钟以内就知道了小Y用了多少次操作。那么问题来了,小Y到底用了多少次操作呢?
输入
两个数字表示X和Y其中1<= X <= 1,000,000,0001<= Y <= 1,000,000,000
输出
一个数字,表示把X变成Y最少需要多少次操作
输入样例
1 1000000000
输出样例
39 考虑由y变成x,那么只有2种操作:1.y/=2 2.y+=1 ; 当y为奇数,那么只能执行第二种:y+=1变为偶数 当y为偶数,考虑将其变为y/2,那么直接除即可;如果变成y/2+1,第一种就是先除再加 1,操作为2步;否则就是加2然后再/2,操作为3步; 所以对于偶数的情况,先除再加更优; 那么整个解法就出来了:对于是偶数的就/2,对于y
#include#include #include #include #include