每行有两个不大于65535的非负整数
对于每一行的两个整数,输出一行,内容为YES或NO
2 4 9 18 45057 49158 7 12
YES YES YES NO
#include<stdio.h> #include<math.h> int main (void){ int a,c; while(scanf("%d %d",&a,&c)!=EOF){ int flag=0; int * conversion(int a); int *b; int *d; b=conversion(a); //一共可以进行16次循环左移,每次循环判断左右两数能否相等 for(int k=0;k<16;k++){ int temp=b[15]; //接下来开始进行一次的左移 for(int i=0;i<16;i++){ *(b+15-i)=*(b+15-1-i); } b[0]=temp; //这个用来看转换为的二进制 // for(int i=0;i<16;i++){ // printf("%d ",*(b+i)); // }printf("\n"); //计算移位后的值 int out=jisuan(b); // printf("%d ",out); // printf("\n"); if (out==c){ flag=1; } } // printf("\n"); d=conversion(c); //一共可以进行16次循环左移,每次循环判断左右两数能否相等 for(int k=0;k<16;k++){ int temp=d[15]; //接下来开始进行一次的左移 for(int i=0;i<16;i++){ *(d+15-i)=*(d+15-1-i); } d[0]=temp; // //这个用来看转换为的二进制 // for(int i=0;i<16;i++){ // printf("%d ",*(b+i)); // }printf("\n"); //计算移位后的值 int out=jisuan(d); // printf("%d ",out); if (out==a){ flag=1; } } if(flag==1){ printf("YES\n"); } else{ printf("NO\n"); } } return 0; } //这个函数用来转换进制 int * conversion(int a){ int jishu=0; int cunchu[100]; int n=0; while(a!=1){ n=a%2; a=a/2; cunchu[jishu]=n; jishu+=1; } cunchu[jishu]=1; int zong=jishu+1; int se[zong]; for(int j=0;j<zong;j++){ se[j]=cunchu[jishu-j]; } //补全16位 int se17[17]; for(int i=0;i<zong;i++){ se17[i]=se[i]; } for(int i=zong;i<16;i++){ se17[i]=0; } se17[16]=9; int *r=se17; return r; } int jisuan(int a[16]){ int sum=0; for(int i=0;i<16;i++){ sum+=a[15-i]*pow(2,i); } return sum; }