1151_位操作練習

// 1151_位操作練習.cpp : 定義控制檯應用程序的入口點。
//

//題目1151:位操作練習
//時間限制:1 秒內存限制:32 兆特殊判題:否提交:1828解決:1015
//題目描述:
//給出兩個不大於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 "stdafx.h"
#include "stdio.h"
int main()
{
    int n;
    unsigned short a,b;
    scanf("%d",&n);
    for (int i=0;i<n;i++)
    {
        scanf("%hu %hu",&a,&b);          //unsigned是%hu
        unsigned short a1,a2;
        int flag = 0;
        for(int j=0;j<16;j++)
        {       
            a = (a >> 15 )|( a << 1);  //循環左移一位(普通右移15位和普通左移1位進行|操作)

            if(a == b)
            {
                printf("YES\n");
                flag = 1;
                break;
            }
        }
        if (flag == 0)
        {
            printf("NO\n");
        }
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章