本人是小白,请大佬们多多指教;
题目描述:
数学上把2的K次方叫2的K次幂,如4、8、32等。给定一个整数n,请输出距离它最近的那个2的幂是多少。如果有两个距离相同,输出那个小的。
输入格式:
只有一个整数 n(10 <= n <= 2000000000);
输出格式:
只有一个整数,表示距离 最近的那个2的幂。
样例输入1:
17
样例输出1:
16
样例输入2:
58
样例输出2:
64
解析:
此题适合用递归做,但是归类为入门题,所以我们可以尝试用循环与分支来做;
下面附上代码;
#include<iostream>
#include<math.h>
using namespace std;
int main(){
long long n,a=2,minn=9999,k;//我们先看题,数值大,用long long;
//我们定义a=2,方便乘积,变量minn便于比较;
cin>>n;
while(a){
a*=2;
if(abs(n-a)<minn){
minn=n-a;//不断减小abs(n-a)的值,将minn的值作为 此值;
}else{
cout<<a/2;//如果>minn,则a/2为最接近的数;
break;
}
}
return 0;
}
完成!