“玲珑杯”ACM比赛 Round #5------I am Two

“玲珑杯”ACM比赛 Round #5
I am Two
Time Limit:1s Memory Limit:64MByte


Submissions:423Solved:166


DESCRIPTION
Check whether an integer n is a power of 2.


INPUT
First line contains a single integer T (T<=20) which denotes the number of test cases. 
For each test case, there is an 32-bit integer N .
OUTPUT
For each case, output the "Yes" or "No" in a single line.
SAMPLE INPUT
3
1
3
8
SAMPLE OUTPUT
Yes
No

Yes


题解:这道题的意思就是判断一个数是否是2的n次幂,如果是就输出Yes,否则输出No.

可以用“按为与运算”来解决这道题,将给出的那个数和那个数-1的二进制进行与运算,如果结果为0,那这个数就是2的n次幂。因为2的n次幂有一个特点,都是10、100、1000、10000、、、这种格式,而2的n次幂-1的二进制则是01、011、0111、01111、、、与运算正好为0.

#include <stdio.h>
bool fun(int m)
{
    bool scnt=0;
    if((m>0)&&(m&(m-1))==0)
        scnt=1;
    return scnt;
}

int main()
{
    int n;
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        if(fun(n))
        printf("Yes\n");
        else
        printf("No\n");
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值