解题思路:

我们可以直接使用c语言的pow函数,它在math.h库里,pow(2,n)表示2的n次方,不过这里给大家介绍更为强大的位运算。


程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。

基本的位运算有:

&    与    两个位都为1时,结果才为1    

|    或    两个位都为0时,结果才为0    

^    异或    两个位相同为0,相异为1    

~    取反    0变1,1变0    

<<    左移    各二进位全部左移若干位,高位丢弃,低位补0    

>>    右移    各二进位全部右移若干位,对无符号数,高位补0

这里主要使用<<运算

  

a << b就表示把a转为二进制后左移b位(在后面添b个0)。

例如100的二进制为1100100,而110010000转成十进制是400,那么100 << 2 = 400。可以看出,a << b的值实际上就是a乘以2的b次方,因为在二进制数后添一个0就相当于该数乘以2。

通常认为a << 1比a * 2更快,因为前者是更底层一些的操作。因此程序中乘以2的操作请尽量用左移一位来代替。

相同的对于a>>b来说,就是a除以2的b次方。

对于这道题来说,使用位运算简直是再简单不过。

参考代码:

#include <stdio.h>

int main ()
{
	int n;
	scanf("%d",&n);
	printf("%d",(1<<n)%10007);
	return 0;
}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论