首页 > 试题广场 >

位操作练习

[编程题]位操作练习
  • 热度指数:8814 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
给出两个不大于65535的非负整数,判断其中一个的16位二进制表示形式,是否能由另一个的16位二进制表示形式经过循环左移若干位而得到。 循环左移和普通左移的区别在于:最左边的那一位经过循环左移一位后就会被移到最右边去。比如: 1011 0000 0000 0001 经过循环左移一位后,变成 0110 0000 0000 0011, 若是循环左移2位,则变成 1100 0000 0000 0110

输入描述:
每行有两个不大于65535的非负整数


输出描述:
对于每一行的两个整数,输出一行,内容为YES或NO
示例1

输入

2 4
9 18
45057 49158
7 12

输出

YES
YES
YES
NO
头像 粗心的大师兄准备笔试
发表于 2022-03-23 10:13:46
#include<stdio.h> using namespace std; int main(){ int a,b; int i,j; while(scanf("%d%d",&a,&b)!=EOF){ for(i=0;i< 展开全文
头像 v0rd
发表于 2022-03-13 08:48:10
不转换为二进制,直接用位运算实现循环移位 实现16位二进制的循环移位,可以先判断移出位是否为1,然后将原数字左移1位,再加上移出位,之后和0xffff进行与操作,取低16位。最多循环16次即可得出结果 #include <iostream> #include <string> 展开全文
头像 烤肉__
发表于 2023-03-26 16:17:51
循环左移,但是默认的是无符号左移,那怎么办呢? 就左移的时候检查一下最高位是不是1,如果是1,咱们末尾给他补上就得了呗。用x << 1 | 1就可以给末尾补1且左移了。 所以,答案就是,两个数a,b,让b循环左移16次,如果16次内任何一次使得a和b相同了那么就输出YES。否则NO。 # 展开全文
头像 MrMello
发表于 2023-03-15 11:45:01
#include <stdio.h> #include <stdbool.h> //十进制转化为二进制,并用数组输出 void binary(int n, char x[]){ int i = 0; int temp; while(n != 0){ 展开全文
头像 牛客600608245号
发表于 2023-03-10 21:01:51
#include <iostream> using namespace std; int main() { int a, b; while(scanf("%d%d",&a,&b)!=EOF){ for(int i = 0;i < 16;i++){ 展开全文
头像 牛客7777779号
发表于 2023-02-12 09:49:39
#include <iostream> using namespace std; //十进制转二进制 void bin(int a[],int m){ for (int i = 15; i >= 0; i--){ //从数组最后一位开始存,正序输出数组就是正确的二进制 展开全文
头像 小苕
发表于 2023-03-19 12:05:27
#include <stdio.h> #include <string.h> int a[16]; int b[16]; //输入的数如果不满16位,就要补0,但我输入的是按照类似于小端存储,因此将转换后的数求逆 void reverse(int a[], int len 展开全文
头像 牛客429241980号
发表于 2024-03-18 19:48:03
#include <iostream> using namespace std; void zhuanhuan(string& rs, int num) { int ys; rs = ""; while (num > 0) { 展开全文
头像 JianJ
发表于 2024-03-25 15:25:42
#include<iostream> #include<bitset> using namespace std; int main(void) { int a,b; while(cin >> a >> b) { bitset<16&g 展开全文
头像 牛客166649559号
发表于 2024-03-17 15:36:41
#include<iostream> #include<algorithm> #include<string> using namespace std; void tansb(int n,string &sa){ int i=15; while(n& 展开全文