【基础】寻找2的幂
题目描述
数学上把2的K次方叫2的K次幂,如4、8、32等。给定一个整数n,请输出距离它最近的那个2的幂是多少。如果有两个距离相同,输出那个小的。
输入
只有一个整数 n(10 <= n <= 2000000000)
输出
只有一个整数,表示距离 最近的那个2的幂。
样例
输入
17
输出
16
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
long long int cishu(long long int n)
{
long long int count=0;
while(n>0)
{
n=n/2;
count++;
}
return count;
}
int main()
{
long long int n,ans,ans1,jieguo,jieguo1;
scanf("%lld",&n);
ans=cishu(n)-1;
ans1=cishu(n);
jieguo=pow(2,ans);
jieguo1=pow(2,ans1);
if(jieguo1-n<n-jieguo)
{
printf("%lld",jieguo1);
}
else
printf("%lld",jieguo);
return 0;
}
注:
需要注意题目中所说的距离最近四个字。