六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 19|回复: 0

如果快速判断一个正整数是否为2的幂次方

[复制链接]

升级  57.33%

114

主题

114

主题

114

主题

举人

Rank: 3Rank: 3

积分
372
 楼主| 发表于 2013-2-4 20:25:17 | 显示全部楼层 |阅读模式
给定一个正整数(N <= 2^32),要求快速判断它是否为2的幂次方。(不可用循环)
通常我们知道:
       十进制         二进制
2^0 == 1              0000 0001
2^1 == 2              0000 0010
2^2 == 4              0000 0100
2^3 == 8              0000 1000
2^4 == 16             0001 0000
2^5 == 32             0010 0000
从上述规律中我们可以得出,题目最终归结为判断此数的二进制表示(unsigned)中是否只有一位为1。

不用循环判断的算法如下:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main(int argc, char **argv){    unsigned int n = atoi(argv[1]);    if (n >= 1) {        if (n & (n - 1))            printf("%d: no\n", n);        else            printf("%d: yes\n", n);    }    exit(EXIT_SUCCESS);}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表