通过例子进阶学习C++(四)计算2的64次方,不服写写看
本文是通过例子学习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.总结
通过该例子,可以学习:
- 进一步理解
int
,long
,每个类型的变量值是有范围的; - 可以通过数组,进行超大数字的
+ - * /
运算; - 数组定义及使用;
- 字符和数字的转换,从数字
0
转换为字符'0'
,或者从字符'0'
转换为数字0
; - 循环的嵌套
通过例子进阶学习C++(四)计算2的64次方,不服写写看相关推荐
- Mysql进阶学习(四)分组函数与分组查询
Mysql进阶学习(四)分组函数与分组查询 一.进阶4:分组函数 1.简单的使用 1.1 SUM 求和 1.2 AVG 求平均值 1.3MIN 最小值 1.4 MAX 最大值 1.5 COUNT求总数 ...
- 网络安全进阶学习第四课——SSRF服务器请求伪造
文章目录 一.什么是SSRF? 二.SSRF成因 三.SSRF简析 四.PHP存在SSRF的风险函数 五.后台源码获取方式 六.SSRF危害 七.SSRF漏洞挖掘 从WEB功能上寻找, 从URL关键字 ...
- GO 重新进阶学习(四)
网络部分 通道和sync包 加锁 使用channel channel的PV操作 RWMutex和Map 计算机网络 计算机网络体系架构 面向连接 UDP UDP的服务器 UDP的客户端 UDP的应用. ...
- android 键编译,Android 音视频学习系列 (四) 一键编译 32/64 位 FFmpeg 4.2.2
前言 2020/5/20 增加了硬件解码编译脚本 编译环境 Centos + NDK20b + FFmpeg4.2.2 + Android-21/16 2020/4/26 更新了编译 64 位脚本 编 ...
- Java中线程的学习(四)——线程的进阶应用(涉及锁、经典卖票案列)
下面进行线程的进阶应用 ①需求:计算任务,一个包含了2万个整数的数组,分拆了多个线程来进行并行计算,最后汇总出计算的结果. public class Count {public static void ...
- create table进阶学习(四)
create table进阶学习系列(七) 本篇学习create table子项:supplemental_logging_props supplemental_logging_props子项 ...
- 一起进阶学习JAVA:MySQL海量数据存储与优化
一起进阶学习JAVA:MySQL海量数据存储与优化 第一部分 分库分表实战及中间件 1.1 背景介绍 1.1.1 背景描述 刚开始我们的系统只用了 单机数据库 随着用户的不断增多,考虑到系统的高可用和 ...
- “IT百科”进阶学习之“虚拟化技术全攻略”
"IT百科"进阶学习之"虚拟化技术全攻略" "虚拟化技术"针对从事IT技术的相关工作人员应该都有听说或者应用过,而对于多数网友朋友们可能没有 ...
- 强化学习(四) - 蒙特卡洛方法(Monte Carlo Methods)及实例
强化学习(四) - 蒙特卡洛方法(Monte Carlo Methods)及实例 4. 蒙特卡洛方法 4.1 蒙特卡洛预测 例4.1:Blackjack(21点) 4.2 动作价值的蒙特卡洛估计 4. ...
最新文章
- Hyperledger Fabric Docker 文件路径权限
- linux PHP 编译安装参数详解
- 如何查看tomcat是否安装成功_如何查看网站是否被收录?
- Invoke-Express 执行多个批处理命令的函数
- Stream流中的常用方法_map
- Spring Boot注解
- Nginx源码分析 - 基础数据结构篇 - 单向链表结构 ngx_list.c(06)
- PostgreSQL Server进程检查启动脚本
- 阿里云OS和Android之争100问
- c语言教材系统管理课设
- 全国计算机二级ps考什么,计算机二级ps考试内容有哪些
- Unity 苹果内购
- 训练GAN的16个trick
- 桌面上计算机图标怎么改成中文,怎么修改电脑桌面上的图标
- openwrt安装docker并启动
- 计算机网络怎样连手机软件,手机怎么共享网络给电脑_手机如何共享电脑网络-win7之家...
- 计算机毕业设计springboot+vue基本微信小程序的社区疫情防控系统
- 手把手教你成为荣耀开发者:如何获取平台帮助及最新通知?
- hadoop的基本命令、java程序处理hd…
- PROE二次开发(protoolkit):把PRT或者ASM模型转换成STEP,PS,IGES,CATIA等等格式