现有一个奇葩的计算器,只能执行乘2和减1操作,现在给定任意两个数字
m,n,其中m,n范围是 1<=m,n<=10^9
解决方式:
分情况讨论:
1,m=n 结果为0
2,m>n 结果为 m-n
3,m<n
3.1 m<2*n-1 m-=1
3.2 m>=2*n-1 m*=2
c++代码实现:
1,循环实现
int solution(int m, int n) {
int count = 0;
while (m != n) {
if (m < n) {
if (n < 2 *m-1) {
m -= 1;
}
else {
m = 2 * m;
}
count++;
}
else if(m>n){
count+=m-n;
m=n;
}
}
return count;
}
输入样例:4,5输出3
1,16 输出 4
2,递归实现:
// 问题描述经过有限次的-1,乘2操作,得到n,输