首页 > 代码库 > CSU_1410: 整数转换
CSU_1410: 整数转换
Description
我们可以通过对一个整数A进行加1操作或者乘2操作使其转换为另一个整数B。
给出两个整数X,Y,计算至少需要多少步才能将X转换为Y。.
Input
输入的第一行包含一个整数T (1≤ T ≤ 500),表示一共有T组测试数据。
每组测试数据占一行,包含两个整数X,Y (1≤ X ≤ Y ≤ 1018)。
Output
对于每组测试数据,输出至少需要多少步才能将X转换为Y。
Sample Input
3
1 1
3 10
2 11
Sample Output
0
3
4
HINT
对样例2的解释:只需3步即可将3转换为10:3-> 4 -> 5 -> 10。
对样例3的解释:只需4步即可将2转换为11:2-> 4 -> 5 -> 10 -> 11。
Source
中南大学第八届大学生程序设计竞赛
//从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; }
CSU_1410: 整数转换
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。