Python3 题解 | #2的n次方计算#

2的n次方计算

http://www.nowcoder.com/practice/35a1e8b18658411388bc1672439de1d9

#一行题解# #性能测试# #抽象化#

// 这是一个不懂二进制的人也能很简单看懂的题解,不过这个题解性能不高
// 本方法计算(2*310) 100万次计时557.968ms
print(2**int(input()))
// 这是一个性能更高的题解,这个题解的说明将在下方写出
// 本方法计算(1<<310) 100万次计时134.853ms
print(1 << int(input()))

本题为求2的n次幂,在python中求幂计算使用**进行,但2的n次幂可以有一种二进制的特殊计算方式:

即使是第一次看二进制数也可计算得:

0b1 = 1  
0b10 = 2  
0b100 = 4  
0b1000 = 8 

...或者

0b0001 = 1  
0b0010 = 2  
0b0100 = 4  
0b1000 = 8  

...让我们再举一个例子

0b00011 = 3
0b00110 = 6
0b01100 = 12
0b11000 = 24

可以发现,当二进制数中的1的位置都发生左移时, 其十进制数字为左移前的2倍(相反亦可得当二进制数中的1的位置都发生右移时, 其十进制数字为右移前的1/2)。

在python中, 使用<<或者>>进行位运算, 通过对二进制数字进行位移来对符号左边的数字取2的n次幂的和或是与2的n次幂的商。

我们知道, 计算机存储的本质是电信号的高电平与低电平, 即从计算机本身而言, 其记录的方式为二进制, 所以在计算时, 只是将一系列电势记录挪动n个位置很明显比相对复杂的其他运算性能要高得多。

全部评论

相关推荐

11-11 14:21
西京学院 C++
无敌混子大王:首先一点,不管学校层次怎么样,教育经历放在第一页靠上位置,第一页看不到教育经历,hr基本直接扔掉了
点赞 评论 收藏
分享
object3:开始给部分🌸孝子上人生第一课了
点赞 评论 收藏
分享
9 1 评论
分享
牛客网
牛客企业服务