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;
}
时间: 2024-10-08 18:00:09

CSU_1410: 整数转换的相关文章

第13题:整数转换成罗马数字&amp;第14题:罗马数字转换成整数

写在前面: 这两道题合起来写吧,其实整数转罗马数字我前天就写完了,当我想写罗马数转整数的时候竟然脑子一片空白,想了几分钟就想起来Map,本着学习的目的最终还是不想用Map,坚持C语言,今天脑子里直接涌出了Switch方式转换,看来"蹲在马桶上编程"的方式还是蛮不错的o(^▽^)o 整数转罗马数字:主要建立对应关系,输出时有点像百钱百鸡 罗马数字转整数:输入罗马数字(其实就是字符数组)后,for循环遍历,找出对应,这个再看不懂的建议去看看罗马数字表示方法. 第13题:整数转换成罗马数字

计蒜客 挑战难题 整数转换成罗马数字

给定一个整数num,( 1<=num<=3999),将整数转换成罗马数字. 如1,2,3,4,5对应的罗马数字分别位I,II,III,IV,V等. 格式: 第一行输入一个整数,接下来输出对应的罗马数字. 提示: 罗马数字的常识见此链接,对做题有帮助哦-尤其是表示方法. http://baike.baidu.com/link?url=injU8M4bAoc2zRZQ1GtgrfvuzCJO9PLnq6fpQGJLenakbzo-rS8p-qsYHR_81-aN 样例输入 123 样例输出 CXX

Leetcode 273.整数转换英文表示

整数转换英文表示 将非负整数转换为其对应的英文表示.可以保证给定输入小于 231 - 1 . 示例 1: 输入: 123 输出: "One Hundred Twenty Three" 示例 2: 输入: 12345 输出: "Twelve Thousand Three Hundred Forty Five" 示例 3: 输入: 1234567 输出: "One Million Two Hundred Thirty Four Thousand Five Hu

整数转换成罗马数字

编写一个将整数n(1 <= n <= 9999)转换成罗马数字. 整数n(1<=n<=9999)与罗马数字表示有以下对应关系 1000 - m,有几个1000就有几个m对应 900 - 两个字符cm 500 - 一个字符d 400 - 两个字符cd 100 - 一个字符c,有几个100就用几个c表示 90 - 两个字符xc 50 - 一个字符l 40 - 两个字符xl 10 - 一个字符x,有一个10就用几个x 9 - 用两个字符ix表示 5 - 用一个字符v来表示 4 - 用两个

整数转换成字符

2. 进制间的转换 void to2str(int num, int i, char str2[32]) { if (num == 0) { return; } else { to2str(num / 2, i + 1, str2);//位数向前 str2[i] = (num % 2) + '0';//字符整数的转换,取模运算后得到的每一个数字变成字符 } } void to8str(int num, int i, char str8[32]) { if (num == 0) { return;

CSU 1410: 整数转换(数学啊 )

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1410 Description 我们可以通过对一个整数A进行加1操作或者乘2操作使其转换为另一个整数B. 给出两个整数X, Y,计算至少需要多少步才能将X转换为Y.. Input 输入的第一行包含一个整数T (1 ≤ T ≤ 500),表示一共有T组测试数据. 每组测试数据占一行,包含两个整数X, Y (1 ≤ X ≤ Y ≤ 1018). Output 对于每组测试数据,输出至少需要多

将10进制整数转换成16进制整数输出

题意: 把十进制整数转换为十六进制,格式为0x开头,10~15由大写字母A~F表示. Input 每行一个整数x,0<= x <= 2^31. Output 每行输出对应的八位十六进制整数,包括前导0. 案例输出: Sample Input 0 1023 Sample Output 0x00000000 0x000003FF 注意: 用cin>>输入时无需担心Output Limint Exceeded,而用scanf输入应该加上!=EOF. 代码如下: 1 #include<

整数转换字符串

思路:首先确定整数的长度,这样做有两个好处. 一个是用于节省内存,因为要事先申请字符串地址空间: 一个是长度后,可以直接取整数的高位,不需要从个位取,从个位取构成的字符串后面还需要一个逆序 具体代码如下: /* *整数转化成字符串 */ #include <stdio.h> #include <stdlib.h> #include <math.h> char *IntToString(int a) { int temp=a;//保存a的值 int len;//缓存用地

string和整数转换

tostring(int) fromstring(string ) c++11新方式 stod Convert string to double (function template ) stold Convert string to long double (function template ) stoi Convert string to integer (function template ) strtof Convert string to float (function )