看看这个算法!~
求S=2+2*2+2*2*2+....+n个2的值!
以下是算法,可是看不懂,拜托帮忙解释下!~
#include <stdio.h>
int main(int _)
{
scanf( "%d ",&_);
printf( "%d\n ",(((1 < <_)-1) < <1));
}
[解决办法]
其实楼主所说的这个公式可以再化简,把 2 提出来,然后公式里面就是 2 的 n 次方减 1 。
后面的求值的过程中是用的移位来计算的。
1 向左移 1 位就是 2的一次方;1 向左移 2 位就是 2的二次方;
1 向左移 n 位就是 2的n次方;
所以 :(1 < <_) 就是 2 的 n 次方 ,((1 < <_)-1) 就是 2 的 n 次方减 1 。
(((1 < <_)-1) < <1) 就是 2 的 n 次方减 1 再乘以 2 。也就是我们化简后的公式了。