Life is long ......

继续向前 永不停止

   :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

首先看一下2的n次方数表示成二进制的样子

上图看出n+1次方相对于n次方整个数向左移了1位 据此C语言实现如下:

 

 

1 #include "studio.h"
2
3  int main(){
4
5 int i=16;
6 int n;
7
8 printf("输入一个int类型整数:");
9 scanf("%d",&n);
10 if(n>1<<(i-1)){
11 printf("\n输入超出范围!!\n");
12 return0;
13 }
14 else{
15 for(i=0;i<16;i++){
16 if(n==1<<i){
17 printf("\n整数%d是2的%d次方!\n",n,i);
18 return1;
19 }
20 }
21 printf("整数%d不是2的阶次方。",n);
22 return0;
23 }
24 }

这个程序的问题如果一个数在移位的时候,恰好把超出int范围的数字丢弃剩下....1000.....,这个数也被判为是2的n次方。

不知道各位有没有更好的方法实现,能够使程序运行效率更高。

posted on 2010-03-17 14:45  patrickwai  阅读(1026)  评论(0编辑  收藏  举报