输入一个整数,判断其是否是2^n,若是,输出这
==================================================================================
//个数,若不是,输出和它最接近的为2^n的那个整数。
附加源代码1:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int input;//键盘输入一个整数input
int i,j;//i,j待会儿存放input与左边和右边的为2^n的差值
int m,n;//保存左边,右边的与inout最接近的2^n
printf("请输入一个整数input=");
scanf("%d",&input);
if(input<=0)
{
printf("不是2^n");
printf("和它最接近的2^n为1");
}
else
{
for(int k=0;k<1000;k++)//假设2^n中的n不会超过1000
{
if(input==pow(2.0,k))
{
printf("%d是2^k",input);
break;//跳出for循环
}
else if(input>pow(2.0,k-1)&&input<pow(2.0,k))
{
i = input-pow(2.0,k-1);
j = pow(2.0,k)-input;
m = pow(2.0,k-1);
n = pow(2.0,k);
if(i<j)//即与他最接近的是他左边的那个数字
{
printf("%d",m);
break;
}
else
{
printf("%d",n);
break;
}
}
}
}
system("pause");//包含在include<stdlib.h>
return 0;
}
==================================================================================
附加源代码2:
//如果这个数是2的n次方幂,那可以将这个数先对2取模为0,再对2整除,再对2取模,
//一直到这个数最后为2;如果不能这样做,那么这个整数就不是2的n次方幂。
<span style="color:#000000;">#include<stdio.h>
#include<stdlib.h>
int main()
{
int input;//键盘输入一个整数input
int count = 1;//待判断的整数是2的count次方
printf("请输入一个整数input=");
scanf("%d",&input);
while(input)
{
if(2==input)//依次除2,最后只剩下2时,表明是2的几次幂
{
printf("YES:他是2的%d次幂\n",count);
break;
}
if(0==input%2)//如果数与2求余为0
{
input = input/2;//那么取他的一半继续循环下去
count++;//幂加1
}
else
{
printf("NO\n");//此循环类可以判断前后的与他最接近的2^n并输出
break;
}
}
return 0;
}
</span>