zoukankan      html  css  js  c++  java
  • 九度OJ 1151:位操作练习 (位操作)

    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:1679

    解决:924

    题目描述:

    给出两个不大于65535的非负整数,判断其中一个的16位二进制表示形式,是否能由另一个的16位二进制表示形式经过循环左移若干位而得到。

    循环左移和普通左移的区别在于:最左边的那一位经过循环左移一位后就会被移到最右边去。比如:
    1011 0000 0000 0001 经过循环左移一位后,变成 0110 0000 0000 0011, 若是循环左移2位,则变成 1100 0000 0000 0110

    输入:

    第一行是个整数n, 0 < n < 300000,表示后面还有n行数据
    后面是n行,每行有两个不大于65535的非负整数

    输出:

    对于每一行的两个整数,输出一行,内容为YES或NO

    样例输入:
    4
    2 4
    9 18
    45057 49158
    7 12
    样例输出:
    YES
    YES
    YES
    NO
    来源:
    2010年北京大学计算机研究生机试真题

    思路:

    用另一个数暂存普通左移会丢掉的部分,然后补上。


    代码:

    #include <stdio.h>
     
    int main(void)
    {
        int n, i, j;
        unsigned short a, b;
        int flag;
     
        while (scanf("%d", &n) != EOF)
        {
            for (i=0; i<n; i++)
            {
                scanf("%hu%hu", &a, &b);
                for (j=0; j<16; j++)
                {
                    flag = a&1;
                    a >>= 1;
                    a |= flag<<15;
                    if (a == b)
                    {
                        printf("YES
    ");
                        break;
                    }
                }
                if (j==16)
                  printf("NO
    ");
            }
        }
     
        return 0;
    }
    /**************************************************************
        Problem: 1151
        User: liangrx06
        Language: C
        Result: Accepted
        Time:0 ms
        Memory:912 kb
    ****************************************************************/


    编程算法爱好者。
  • 相关阅读:
    MFC CDialog/CDialogEx DoModal ALT
    yum和apt-get用法及区别
    ubuntu 12.04 source.list 源更新
    elasticsearch 优化
    TRIE树
    数据统计经验浅谈
    机器学习
    python 读取libsvm文件
    spark 参数调优
    python中的一些函数
  • 原文地址:https://www.cnblogs.com/liangrx06/p/5083876.html
Copyright © 2011-2022 走看看