计算2的幂题解(两种方法)及变式

本文介绍了两种计算2的n次方的方法,一种使用`cmath`库中的`pow`函数,另一种通过循环实现。同时,文章探讨了如何判断一个数是否为2的幂,利用位运算性质,当n&(n-1)的结果为0时,n是2的幂,否则不是。

计算二的幂


题目描述
给定非负整数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的幂数):

十进制二进制
5101
4100

与(&)后的结果为4,也就是说:不是2的幂数的数和它前一个数相与(&)的话,那么得到的结果就是它前一个数。

我们再以8为例(8是2的幂数):

十进制二进制
81000
70111

与(&)后的结果为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;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值