Description
数学上把2的K次方叫2的K次幂,如4、8、32等。给定一个整数n,请输出距离它最近的那个2的幂是多少。如果有两个距离相同,输出那个小的。
Input
只有一个整数 n(10 <= n <= 2000000000)
Output
只有一个整数,表示距离 最近的那个2的幂。
Sample Input
17
Sample Output
16
<span style="font-family:Times New Roman;">#include<cstdio>
#include<cassert>
int main(){
int num,temp=1,before,now;
scanf("%d",&num);
assert(num>=10 && num<=2000000000);
while(temp<num){
temp = temp << 1;
}
now =temp;
before = temp >> 1;
if((num-before)==(now-num)) ///重点两个相等时候的处理,取较小的那个
printf("%d\n",before);
else
printf("%d\n",(num-before)<(now-num) ? before : now);
return 0;
}</span>
Important:if((num-before)==(now-num)) ///重点两个相等时候的处理,取较小的那个.