在刚刚过去的计算机组成原理实验课P4上,有一个非常有趣的问题。
我们定义一个32位二进制数为非下降的,当且仅当从高位到低位,每个数位提取出来构成的序列单调不降。
比如 00000111111111111111111111111111 就是非下降的, 而 00010111111111111111111111110111 就不是非下降的。
接下来,我们会有T组询问,需要你判断一个二进制数是不是非下降的。
第一个数为数据组数$T$
接下来$T$行,每行1个整数$x$($0 \le x \le 2^{32}-1$)
保证$T \le 10^{5}$
对于每组数据,若x为非下降的,输出一行Yes
,反之输出一行N0
。
3
1
7
16
Yes
Yes
N0
#include <stdio.h>
#include <math.h>
int main(){
int T,cnt;
int u;
scanf("%d",&T);
while(T--){
scanf("%d",&u);
u++;
cnt=0;
while(u){
cnt+=u&1;
u>>=1;
}
if(cnt==1) printf("Yes\n");
else printf("No\n");
}
}
Author:clay17