我们可以通过对一个整数A进行加1操作或者乘2操作使其转换为另一个整数B。
给出两个整数X, Y,计算至少需要多少步才能将X转换为Y。.
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1410
3
1 1
3 10
2 11
0
3
4
PS:
逆向考虑;
代码如下:
#include <cstdio>
#include <cstring>
#define LL long long
int main()
{
int t;
LL a, b;
LL k;
scanf("%d",&t);
while(t--)
{
scanf("%lld %lld",&a,&b);
k = 0;
while(a < b)//逆向
{
if(2*a > b)//2*a>b那么a变成b只能是一个个加1
{
k+=b-a;
break;
}
else
{
if(b%2)//b%2的余数不等于0,那么a必须先加1,在乘以2
{
k+=2;
}
else
{
k++;
}
b/=2;
}
}
printf("%lld\n",k);
}
return 0;
}
#include <stdio.h>
int main()
{
long long t,n,m,ci,er;
scanf("%lld",&t);
while(t--)
{
scanf("%lld%lld",&n,&m);
ci=0;
er=1;
while(n*2<=m)
{
n*=2;
ci++;
er*=2;
}
while(er!=0)
{
if((m-n)%er==0)
{
ci+=(m-n)/er;
break;
}
else
{
ci+=(m-n)/er;
n+=(m-n)/er*er;
er/=2;
}
}
printf("%lld\n",ci);
}
return 0;
}原文:http://blog.csdn.net/u012860063/article/details/41790203