程序必须确定它是2还是-2的幂。如果N是2或-2的幂,则程序必须打印yes。否则程序必须打印否

时间:2018-07-14 07:59:56

标签: c

#include<stdio.h>
#include <stdlib.h>
int main()
{
    long long int a;
    int flag = 0;
    scanf("%lld", &a);
    if (a > 0)
    {
        while (a > 0)
        {
            if (a % 2 == 0 || a == 1)
            {
                a = a / 2;
                flag = 1;
            }
            else
            {
                flag = 0;
                break;
            }
        }
    }
    if (a < 0)
    {
        while (a <= -1)
        {
            if (a % 2 == 0 || a == -1)
            {
                a = a / 2;
                flag = 1;
            }
            else
            {
                flag = 0;
                break;
            }
        }
    }
    if (flag == 1)
    {
        printf("yes");
    }
    else
    {
        printf("no");
    }
}

click this for output image

给出整数N,程序必须确定它是2还是-2的幂。如果N是2或-2的幂,则程序必须打印yes。否则程序必须打印编号。

边界条件:

-10^17 <= N <= 10^17

输入格式:
第一行包含N的值。

输出格式:
第一行包含yesno

对于输入-4503599627370496,它应该打印no,但它打印yes。解决方案,请

2 个答案:

答案 0 :(得分:0)

如果是负数,还应该计算2的幂。如果是这样,它将无法正常工作。将-2赋予52的幂,以4503599627370496代替-4503599627370496

下面的代码使用按位移位运算符解决了这个难题:

#include <stdio.h>  
#include <stdlib.h>

int main()
{
    long long int a, aPositive, l = 1;
    scanf("%lld", &a);

    aPositive = a > 0 ? a : -a;

    int count = 0;
    while (l < aPositive)
    {
        l = l << 1;
        count++;
        //printf("%d\t%lld\n", count, l);
    }

    if (l == aPositive && (a > 0 || count % 2 == 1))
    {
        printf("yes");
    }
    else
    {
        printf("no");
    }

    return 0;
}

答案 1 :(得分:0)

这里已经解决了非常类似的问题:how-to-check-if-a-number-is-a-power-of-2

bool IsPowerOfTwo(long long x)
{
    return (x != 0) && ((x & (x - 1)) == 0);
}

int main()
{
    bool result = IsPowerOfTwo(256);

    if (result )
    {
        printf("yes");
    }
    else
    {
        printf("no");
    }

    return 0;
}
相关问题