题目来源:
https://www.nowcoder.com/practice/35a1e8b18658411388bc1672439de1d9?tpId=107&&tqId=33310&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking
描述
不使用累计乘法的基础上,通过移位运算(<<)实现2的n次方的计算。
数据范围:0<=n<31
输入描述:
一行输入整数n(0 <= n < 31)。
输出描述:
输出对应的2的n次方的结果。
示例1
输入:
2
输出:
示例2
输入:
输出:
代码实现:
代码分析:
题目要求计算2的n次方的结果,我们当然首先会想到使用math函数中的pow函数,直接pow(2,n)就可以解决问题,代码如下:
但是题目还有一个要求说:使用移位运算
那么显然常规算法是不可以在这里使用的
我们首先来思考移位操作符是怎么操作一个数字的。
在之前操作符知道:
移位操作符: >> <<
移位操作符:其实是作用于一个数的二进制数
举例我们可得知:
转换成十进制,我们发现给一个数字左移一位就像给这个数字乘上了2
那么我们显然可以得知,要计算2的n次方,我们可以给数字1的二级制数左移n位就得到了2的n次方
因此我们用代码实现:
或者我们用数字2开始左移(n-1)位也是可以的
编辑
到底和上面一样
测试:
示例1
输入:
2
输出:
示例2
输入:
输出:
最后我们将代码放在牛客网中发现也是没问题的
结论:
本题的练习让我们对左移操作符进行了复习,也让我们掌握了一种非常规算法的2的n次方的求解方法,感兴趣的小伙伴可以自己尝试尝试哦~
(本题完)