大一c语言实验报告追加50求解第九题

题目来源:2010年北京大学计算机研究生机试真题
题目描述:
给出两个不大于65535的非负整数,判断其中一个的16位二进制表示形式,是否能由另一个的16位二进制表示形式经过循环左移若干位而得到。循环左移和普通左移的区别在于:最左边的那一位经过循环左移一位后就会被移到最右边去。比如:00 0001 经过循环左移一位后,变成 00 0011, 若是循环左移2位,则变成 00 0110
第一行是个整数n, 0 < n < 300000,表示后面还有n行数据后面是n行,每行有两个不大于65535的非负整数
对于每一行的两个整数,输出一行,内容为YES或NO
样例输入:
42 49 587 12
样例输出:
YESYESYESNOcpp 代码如下:#include #include int main() {
int a, int p = pow(2, 15); while (scanf("%d", &n) != EOF) {
for (int i = 0; i < i++) {
scanf("%d %d", &a, &b);
for (i = 0; i = p) {
a = ((a - p) << 1) + 1;
a = a << 1;
if (a == b)
if (i == 16)
printf("NO/n");
printf("YES/n");
} } return 0;}/************************************************************** Problem: 1151 User: coder Language: C Result: Accepted Time:10 ms Memory:904 kb****************************************************************/java 代码如下:import java.util.Spublic class Main { public static void main(String[] args) {
Scanner s = new Scanner(System.in);
while(s.hasNextInt()){
int n = s.nextInt();
for(int i=0; i<n; i++){
int a = s.nextInt();
int b = s.nextInt();
String str1 = Integer.toBinaryString(a);
String str2 = Integer.toBinaryString(b);
for(int j=0; j<16-str1.length(); j++)
str1 = "0" + str1;
for(int j=0; j<16-str2.length(); j++)
str2 = "0" + str2;
str1 = str1+str1;
if(str1.contains(str2))
System.out.println("YES");
System.out.println("NO");
} }}/************************************************************** Problem: 1151 User: coder Language: Java Result: Accepted Time:160 ms Memory:15988 kb****************************************************************/
最新教程周点击榜
微信扫一扫}

我要回帖

更多关于 迷宫求解 c语言 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信