计算二的幂
题目描述
给定非负整数n,求2^n的值,即2的n次方。
输入格式
一个整数n。0≤n<31
输出格式
一个整数,即2的n次方。
样例
输入样例
5
输出样例
32
方法一:
这个方法要调用到cmath头文件当中的"pow"函数,pow函数的格式就是:
pow(底数,指数);
参考代码:
#include<cstdio>
#include<cmath>
int main() {
int n,ans;
scanf("%d",&n);
ans=pow(2,n);
printf("%d",ans);
return 0;
}
方法二:
这个方法要用到循环。每次循环时,就给答案乘一个2,最后输出答案即可。
参考代码:
#include<cstdio>
int main() {
int n,ans=1;
scanf("%d",&n);
for(int i=1;i<=n;i++) {
ans*=2;
}
printf("%d",ans);
return 0;
}
变式(如果我想判断一个数是不是2的幂数,那该怎么做呢?)
这个方法就要用到位运算。
首先,我们来探索一下一个数与(&)上它前一个数会发生什么:
我们以5为例(5不是2的幂数):
| 十进制 | 二进制 |
|---|---|
| 5 | 101 |
| 4 | 100 |
与(&)后的结果为4,也就是说:不是2的幂数的数和它前一个数相与(&)的话,那么得到的结果就是它前一个数。
我们再以8为例(8是2的幂数):
| 十进制 | 二进制 |
|---|---|
| 8 | 1000 |
| 7 | 0111 |
与(&)后的结果为0,也就是说:是2的幂数的数和它前一个数相与(&)的话,那么得到的结果就是0。
所以说,我们就可以用if判断一下,如果n&(n-1)的结果是0的话,说明n就是2的幂数,如果不是0的话,说明n就不是2的幂数。
参考代码:
#include<cstdio>
int main() {
int x;
while(scanf("%d",&x)==1) {
if(x&(x-1)) {
printf("N\n");
}
else {
printf("Y\n");
}
}
return 0;
}
本文介绍了两种计算2的n次方的方法,一种使用`cmath`库中的`pow`函数,另一种通过循环实现。同时,文章探讨了如何判断一个数是否为2的幂,利用位运算性质,当n&(n-1)的结果为0时,n是2的幂,否则不是。
3107

被折叠的 条评论
为什么被折叠?



