题目来源:2的n次方计算_牛客题霸_牛客网

描述

不使用累计乘法的基础上,通过移位运算(<<)实现2的n次方的计算。

数据范围:0<=n<31

输入描述:

一行输入整数n(0 <= n < 31)。

输出描述:

输出对应的2的n次方的结果。

示例1

输入:

2

输出:

4

示例2

输入:

10

输出:

1024

代码实现:

//位运算
int main()
{int n = 0;scanf("%d", &n);//移位int sum = 1 << n;//或者int sum2 = 2 << (n - 1);printf("%d", sum);return 0;
}

代码分析:

题目要求计算2的n次方的结果,我们当然首先会想到使用math函数中的pow函数,直接pow(2,n)就可以解决问题,代码如下:

常规算法
int main()
{int n = 0;scanf("%d", &n);int sum = pow(2, n);printf("%d", sum);return 0;
}

但是题目还有一个要求说:使用移位运算

那么显然常规算法是不可以在这里使用的

我们首先来思考移位操作符是怎么操作一个数字的。

在之前操作符知道:

移位操作符: >>     <<

移位操作符:其实是作用于一个数的二进制数

举例我们可得知:

int main() {int a = 3;int b = a << 1;printf("%d\n", b);//  00000000 00000000 00000000 00000011       --3//a<<1//  00000000 00000000 00000000 00000110       --6return 0;
}

转换成十进制,我们发现给一个数字左移一位就像给这个数字乘上了2

那么我们显然可以得知,要计算2的n次方,我们可以给数字1的二级制数左移n位就得到了2的n次方

因此我们用代码实现:

//位运算
int main()
{int n = 0;scanf("%d", &n);//移位int sum = 1 << n;printf("%d", sum);return 0;
}

或者我们用数字2开始左移(n-1)位也是可以的

到底和上面一样

测试:

示例1

输入:

2

输出:

4

示例2

输入:

10

输出:

1024

最后我们将代码放在牛客网中发现也是没问题的

结论:

本题的练习让我们对左移操作符进行了复习,也让我们掌握了一种非常规算法的2的n次方的求解方法,感兴趣的小伙伴可以自己尝试尝试哦~

2的n次方计算_牛客题霸_牛客网

如果各位小伙伴觉得对自己有所帮助的话 可以点赞收藏+关注哦~

[C语言练习题 7] 通过移位运算(<<)实现2的n次方的计算相关推荐

  1. c语言基本练习题 doc,C语言练习题-基本数据类型和运算.doc

    C语言练习题-基本数据类型和运算.doc 第2章 基本数据类型和运算练习题一. 单项选择题1下列数据中属于"字符串常量"的是( ). A"a"B. ABCC. ...

  2. C++ OJ 中多行数据输入(大小写转换、通过移位运算实现2的n次方、多组输入,每行输入数量不一样)

    1. 多组输入,输出每行最大值 while(cin>>a>>b) 主要解决的是两个为一组的多组数据输入,当一次只输入一个数据时就用 while(cin>>a) 输入 ...

  3. c语言中左移和乘法谁高级,C程序员说使用移位运算代替乘法和除法更有效,是真的吗?...

    在C语言程序开发中,某些移位操作似乎达到与乘法和除法运算相同的效果. 例如,4 >> 1等于2,向右移一位等于2除. 类似地,2 << 1等于4,向左移一位等于2. 因此,一些 ...

  4. 基于C语言、线性表的 二、八、十、十六进制转换 及 加运算、左右移位运算、乘法运算 的科学计算器设计

    源代码见资源:https://download.csdn.net/download/weixin_44410704/19840894 一.需求分析 1.1 设计题目 题目:科学计算器 用C语言实现十进 ...

  5. C 语言中负数移位运算讲解

    C 语言中负数移位运算讲解 "<<".">>"为移位运算符. "<<"为左移位运算符,即数据字节中的每个 ...

  6. C语言中的移位运算乘法,C语言中 移位操作运算

    移位规律: 左移时总是移位和补零.右移时无符号数是移位和补零,此时称为逻辑右移;而有符号数大多数情况下是移位后补最左边的位(也就是补最高有效位),移几位就补几位,此时称为算术右移.(其实跟扩展逻辑一样 ...

  7. c语言中加减和移位,c中的移位运算

    C++位运算,看高手都是运用的灵活自如,打算从今天开始学习他!收藏 每次看到位运算的地方,都比较迷糊.以前学习C的时候也不求甚解,到现在看来,觉得位运算和指针在C++基本知识里是最难理解,最难融会贯通 ...

  8. c语言4字节移位运算,深入懂得C语言中的移位运算

    深入理解C语言中的移位运算 说明:本文主要摘录自<深入理解计算机系统>第二章信息的表示与处理. 移位运算: C语言还提供了一组移位运算,以便向左或者向右移动位模式.对于一个位表示为[xn- ...

  9. C语言移位运算 左移长度大于数据类型字节数的情况

    看CMU的CSAPP课程时,遇到一个很有意思的问题,特此查询资料,记录一下 1. 测试 sizeof(int) = 4 // int 数据类型位4个字节(32位) 测试程序1: 把a左移30位时 (正 ...

最新文章

  1. 41.和为s的两个数字 VS 和为s的连续正数序列
  2. windows上安装gcc/g++环境(MinGW,msys64等)
  3. openstack 用nova API 指定 compute node 创建 instance
  4. Ubuntu镜像国内下载地址
  5. mysql 5.x数据库安装_Ubuntu 12.04 mysql 源码安装--mysql.5.5.x
  6. Log4j的组件和配置文件介绍
  7. 透过面试题,洞察Hbase 核心知识点
  8. angular的uiRouter服务学习(5) --- $state.includes()方法
  9. java拉丁正方形_LeetCode JAVA解题---824. 山羊拉丁文
  10. FreeSql (十四)批量更新数据
  11. Enum,Int,String的互相转换 枚举转换
  12. FileProvider的使用
  13. 小D课堂 - 零基础入门SpringBoot2.X到实战_第11节 Logback日志框架介绍和SpringBoot整合实战_44、新日志框架LogBack介绍...
  14. FreeSWITCH mod_callcenter 整理
  15. Day.js 是一个仅 2kb 大小的轻量级 JavaScript 时间日期处理库,和 Moment.js 的 API 设计保持完全一样,dayjs...
  16. [NOIP2013 普及组 T1] 计数问题
  17. 把常用网站固定在任务栏
  18. 机器学习笔记 - YOLOv7 论文简述与推理
  19. shell脚本实现猜大小游戏
  20. Excel在行上输入连续序号的3种方法的操作比较

热门文章

  1. 一加6T手机Android10 root教程
  2. 推荐一波书单(多阅读,多思考,就会留住好奇心)
  3. SQL2005开启远程连接功能
  4. springboot+考研教室管理系统 毕业设计-附源码221757
  5. C++ always_inline
  6. mitmproxy修改二级代理
  7. springboot layuiAdmin实现分页
  8. layuiadmin(官方)知识点
  9. UVA1646-Edge Case(递推+斐波那契数列)
  10. 合服服务器暂时不能建立新角色,合服规则公告更新:新出台强制合服规则