本文是通过例子学习C++的第四篇,通过这个例子可以快速入门c++相关的语法。

1.乍一看题目非常简单,简单思考一下,可以通过for循环实现:

#include <iostream>
using namespace std;
int main()
{int num = 1;for(int i=0;i<64;i++){num *= 2;}cout<<"2的64次方是"<<num;return 0;
}

然而,代码运行后,得到的结果是0,什么?惊掉了下巴,居然不对?

程序运行后效果如下:

2.一番思考下来,应该是2的64次方超过int能表示的范围了,溢出了就输出0。

那么用long long存储怎么样呢?顺便输出2的1次方,直到2的64次方:

#include <iostream>
using namespace std;
int main()
{long long num = 1;for(int i=0;i<64;i++){num *= 2;cout<<"2的"<<i+1<<"次方是"<<":"<<num<<endl;}cout<<"2的64次方是"<<num;return 0;
}

程序运行后效果如下:

谁来拯救我,还是不对啊?

3.看来long long类型也无法解决溢出问题

回到问题本身,这是一个乘法计算,计算2的62次方得到 4611686018427387904,2的63次方,是这个数字乘以2已经溢出了。考虑一下,我们如何计算4611686018427387904*2=?

可以用字符数组存储这个数字,然后计算乘法就可以了。

#include<iostream>
using namespace std;int main(){char n[32];int a,b,jin=0;//初始化数组n[0] = '1';for(int i=1;i<32;i++){n[i] = '0';}//循环64次,每次数组的值乘以2for(int j=0;j<64;j++){jin = 0;//从最低位开始,计算乘以2后各个位上的值:当前值 * 2 + 进位,然后转换为字符for(int i=0;i<32;i++){a = (n[i]-'0') * 2;n[i] = a%10 + jin + '0';jin =  a/10;}}cout<<"2的64次方是:";for(int i=31;i>=0;i--){cout<<n[i];}return 0;
}

4.总结

通过该例子,可以学习:

  • 进一步理解intlong,每个类型的变量值是有范围的;
  • 可以通过数组,进行超大数字的+ - * /运算;
  • 数组定义及使用;
  • 字符和数字的转换,从数字0转换为字符'0',或者从字符'0'转换为数字0
  • 循环的嵌套

通过例子进阶学习C++(四)计算2的64次方,不服写写看相关推荐

  1. Mysql进阶学习(四)分组函数与分组查询

    Mysql进阶学习(四)分组函数与分组查询 一.进阶4:分组函数 1.简单的使用 1.1 SUM 求和 1.2 AVG 求平均值 1.3MIN 最小值 1.4 MAX 最大值 1.5 COUNT求总数 ...

  2. 网络安全进阶学习第四课——SSRF服务器请求伪造

    文章目录 一.什么是SSRF? 二.SSRF成因 三.SSRF简析 四.PHP存在SSRF的风险函数 五.后台源码获取方式 六.SSRF危害 七.SSRF漏洞挖掘 从WEB功能上寻找, 从URL关键字 ...

  3. GO 重新进阶学习(四)

    网络部分 通道和sync包 加锁 使用channel channel的PV操作 RWMutex和Map 计算机网络 计算机网络体系架构 面向连接 UDP UDP的服务器 UDP的客户端 UDP的应用. ...

  4. android 键编译,Android 音视频学习系列 (四) 一键编译 32/64 位 FFmpeg 4.2.2

    前言 2020/5/20 增加了硬件解码编译脚本 编译环境 Centos + NDK20b + FFmpeg4.2.2 + Android-21/16 2020/4/26 更新了编译 64 位脚本 编 ...

  5. Java中线程的学习(四)——线程的进阶应用(涉及锁、经典卖票案列)

    下面进行线程的进阶应用 ①需求:计算任务,一个包含了2万个整数的数组,分拆了多个线程来进行并行计算,最后汇总出计算的结果. public class Count {public static void ...

  6. create table进阶学习(四)

    create table进阶学习系列(七)   本篇学习create table子项:supplemental_logging_props   supplemental_logging_props子项 ...

  7. 一起进阶学习JAVA:MySQL海量数据存储与优化

    一起进阶学习JAVA:MySQL海量数据存储与优化 第一部分 分库分表实战及中间件 1.1 背景介绍 1.1.1 背景描述 刚开始我们的系统只用了 单机数据库 随着用户的不断增多,考虑到系统的高可用和 ...

  8. “IT百科”进阶学习之“虚拟化技术全攻略”

    "IT百科"进阶学习之"虚拟化技术全攻略" "虚拟化技术"针对从事IT技术的相关工作人员应该都有听说或者应用过,而对于多数网友朋友们可能没有 ...

  9. 强化学习(四) - 蒙特卡洛方法(Monte Carlo Methods)及实例

    强化学习(四) - 蒙特卡洛方法(Monte Carlo Methods)及实例 4. 蒙特卡洛方法 4.1 蒙特卡洛预测 例4.1:Blackjack(21点) 4.2 动作价值的蒙特卡洛估计 4. ...

最新文章

  1. Hyperledger Fabric Docker 文件路径权限
  2. linux PHP 编译安装参数详解
  3. 如何查看tomcat是否安装成功_如何查看网站是否被收录?
  4. Invoke-Express 执行多个批处理命令的函数
  5. Stream流中的常用方法_map
  6. Spring Boot注解
  7. Nginx源码分析 - 基础数据结构篇 - 单向链表结构 ngx_list.c(06)
  8. PostgreSQL Server进程检查启动脚本
  9. 阿里云OS和Android之争100问
  10. c语言教材系统管理课设
  11. 全国计算机二级ps考什么,计算机二级ps考试内容有哪些
  12. Unity 苹果内购
  13. 训练GAN的16个trick
  14. 桌面上计算机图标怎么改成中文,怎么修改电脑桌面上的图标
  15. openwrt安装docker并启动
  16. 计算机网络怎样连手机软件,手机怎么共享网络给电脑_手机如何共享电脑网络-win7之家...
  17. 计算机毕业设计springboot+vue基本微信小程序的社区疫情防控系统
  18. 手把手教你成为荣耀开发者:如何获取平台帮助及最新通知?
  19. hadoop的基本命令、java程序处理hd…
  20. PROE二次开发(protoolkit):把PRT或者ASM模型转换成STEP,PS,IGES,CATIA等等格式

热门文章

  1. JavaScript中linux时间戳与日期的转换
  2. MAC下oracle默认超级管理员账户密码docker作为容器权限不足问题
  3. YOLOv5原理分析及部署教程
  4. 郝志峰《概率论与数理统计》期末复习笔记
  5. 离散数学 等价类 等价关系 划分
  6. 创意电子学-第03课:初学者如何使用数字万用表
  7. ubuntu14.1安装腾讯通rtx,企业必备。
  8. ADSP-21489的开发详解:VDSP+自己编程写代码开发(8-延时算法)
  9. relativity (v1.0.1)靶机
  10. PostgreSQL 列转行问题