我们可以通过对一个整数A进行加1操作或者乘2操作使其转换为另一个整数B。
给出两个整数X,
Y,计算至少需要多少步才能将X转换为Y。.
标签:思维
3
1 1
3 10
2 11
0
3
4
//从y到x逆向考虑,注意用long long #include<cstdio> long long a,b; void solve() { long long ans=0; while(a<b) { if(a>b/2) { ans+=b-a,b=a;//a>b/2那么a变成b只能是一个个加1 } else { if(b%2) ans+=2,b/=2;//b%2的余数不等于0那么a必须先加1,在乘以2 else ans++,b/=2; } } printf("%lld\n",ans); } int main() { int t,i; scanf("%d",&t); while(t--) { scanf("%lld%lld",&a,&b); solve(); } return 0; }
标签:思维
原文地址:http://blog.csdn.net/u012773338/article/details/39030179