GESP7级C++考试语法知识(二、指数函数(1、pow() 函数)


🌟数学魔法函数学院 第五课

《细胞分裂大作战------指数增长》


本课任务

今天,我们将进入一个全新的王国:

🏰 指数函数王国

这里没有风车。

没有炮台。

没有 sin。

没有 cos。

这里最厉害的魔法只有一个:

复制魔法


学完本课后,你将掌握:

✅ 什么是指数增长

✅ 什么是指数函数

✅ C++中的 pow() 函数

✅ 如何解决翻倍问题

✅ 如何建立指数模型

✅ 学会看到"翻倍"、"倍增"就想到指数


第一章:神奇细胞实验室

1、一天。

阿Q来到皇家实验室。

里面有一个神奇细胞:

🦠


2、科学家说:

这个细胞每过1小时,

都会复制出一个自己。


3、刚开始:

复制代码
1个细胞

(1)1小时后:

复制代码
2个细胞

(2)2小时后:

复制代码
4个细胞

(3)3小时后:

复制代码
8个细胞

(4)4小时后:

复制代码
16个细胞

4、阿Q开始记录:

时间(小时) 细胞数量
0 1
1 2
2 4
3 8
4 16

5、突然阿Q发现:

每次都是:

复制代码
×2

第二章:发现规律

1、继续往后推:


(1)第5小时:

复制代码
16 × 2
=
32

(2)第6小时:

复制代码
32 × 2
=
64

(3)第7小时:

复制代码
64 × 2
=
128

2、阿Q发现:

复制代码
1
2
4
8
16
32
64
128

越来越快!


3、这时候国王说:

这种增长方式,

就叫指数增长!


第三章:什么是指数?

1、观察:

复制代码
1

可以写成:

复制代码
2⁰

因为:

复制代码
2⁰ = 1

2、继续:

复制代码
2
=
2¹

复制代码
4
=
2²

复制代码
8
=
2³

复制代码
16
=
2⁴

3、整理:

小时 数量
0 2⁰
1
2
3
4 2⁴

4、规律出来了:

第n小时:

2^n


第四章:指数到底是什么意思?

1、很多同学会背:

复制代码
2³ = 8

却不知道什么意思。


其实非常简单。


2、指数表示:

连续乘多少次。


例如:

复制代码

意思:

复制代码
2 × 2

结果:

复制代码
4

复制代码

意思:

复制代码
2 × 2 × 2

结果:

复制代码
8

复制代码
2⁵

意思:

复制代码
2×2×2×2×2

结果:

复制代码
32

第五章:指数魔法树

1、想象有一棵复制树:

复制代码
第一层

      1

第二层

    1   1

第三层

  1 1 1 1

第四层

1 1 1 1 1 1 1 1

2、数量:

复制代码
1
2
4
8
16
32

3、每一层:

复制代码
×2

这就是指数增长。


第六章:C++中的指数函数

1、问题来了。


如果想计算:

复制代码
2¹⁰

怎么办?


当然可以写:

复制代码
2*2*2*2*2*2*2*2*2*2

但是太麻烦了!


2、C++提供了指数函数:

复制代码
pow()

3、语法:

复制代码
pow(a,b)

表示:

复制代码
a^b

4、例如:

复制代码
pow(2,3)

表示:

复制代码

结果:

复制代码
8

第七章:第一个pow程序

复制代码
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    cout << pow(2,3);

    return 0;
}

输出:

复制代码
8

第八章:细胞分裂模拟器

1、输入:

复制代码
n

2、表示:

复制代码
经过n小时

3、输出:

复制代码
细胞数量

4、根据规律:

复制代码
2^n

5、代码:

复制代码
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int n;

    cin >> n;

    cout << pow(2,n);

    return 0;
}

(1)输入:

复制代码
5

(2)输出:

复制代码
32

第九章:金币翻倍挑战

1、阿Q发现一个神奇宝箱。


第一天:

复制代码
1金币

每天翻倍。


第二天:

复制代码
2

第三天:

复制代码
4

第四天:

复制代码
8

第五天:

复制代码
16

2、第十天呢?


答案:

复制代码
2⁹
=
512

3、为什么不是2¹⁰?

因为:

第一天已经有1个金币。


这个问题特别容易出错。


第十章:指数增长有多可怕?

1、国王说:

我给你两个奖励。


方案A:

复制代码
100万元

直接给你。


方案B:

复制代码
第一天1元

以后每天翻倍

连续30天

2、很多同学选A。


3、实际上:

第30天:

复制代码
2²⁹
=
536870912

约:

复制代码
5亿多元

远远超过100万!


这就是指数增长的威力!


第十一章:竞赛中的指数问题

以后会遇到:


1、汉诺塔

移动次数:

2^n-1


2、满二叉树

第n层节点:

2^{n-1}


3、BFS扩散

感染人数翻倍


4、细胞分裂

数量增长


全部都是指数。


第十二章:pow()注意事项

1、有的同学写:

复制代码
int x = pow(2,10);

2、结果:

复制代码
1024

没问题。


3、但是:

复制代码
pow(2,50)

数字会非常大。


4、使用pow()函数:

要使用:

复制代码
long long

来存储结果。


本课总结

今天我们认识了指数王国最重要的魔法:

✨ 指数函数


1、数学上:

指数表示:

连续乘多少次。

例如:

cpp 复制代码
2^5= 2 * 2 * 2 * 2 * 2  //5个2相乘

2、程序中:

复制代码
pow(a,b)

表示:

复制代码
a^b

3、重要思想:

看到"每次乘同一个数",就要想到指数增长。



竞赛提高篇:


一、pow(a,b) 的返回值是什么类型?

1、有的同学以为:

复制代码
pow(2,10)

返回的是:

复制代码
int

实际上不是!


2、C++中的 pow() 定义在:

复制代码
#include <cmath>

其主要返回类型是:

复制代码
double

例如:

复制代码
cout << typeid(pow(2,10)).name();

得到的是:

复制代码
double

3、例如:

复制代码
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    auto x = pow(2,10);

    cout << x << endl;

    return 0;
}

输出:

复制代码
1024

虽然看起来像整数,

但实际上:

复制代码
double x = 1024.0;

二、为什么竞赛中不建议大量使用 pow()?

1、因为:

复制代码
pow()

是浮点运算。


2、例如:

复制代码
cout << pow(2,50);

理论值:

复制代码
1125899906842624

实际上存储的是:

复制代码
double

存在误差。


3、所以竞赛里经常看到:

复制代码
long long ans = 1;

for(int i=1;i<=n;i++)
    ans *= 2;

而不是:

复制代码
pow(2,n);

三、pow() 能算多大的数?

1、这要看 double 的范围。


2、double 大约能表示:

cpp 复制代码
10 ^ -308  ~  10 ^ 308

3、也就是说:

复制代码
pow(10,300)

还能表示。


4、例如:

复制代码
cout << pow(10,300);

没问题。


5、但是:

复制代码
cout << pow(10,400);

就会输出:

复制代码
inf

表示:

复制代码
Infinity

无穷大。


因为超出 double 范围了。


四、竞赛里更关心的范围

1、虽然 double 能到:

复制代码
10^308

但整数精度远远没那么大。


2、double 只有:

复制代码
约15~16位有效数字

3、例如:

复制代码
pow(2,100)

数值能表示。

但很多低位已经不准确了。


五、long long 能存多大?

1、很多竞赛题用的是:

复制代码
long long

2、范围:

cpp 复制代码
-2^63 ~ 2^63-1

3、约等于:

cpp 复制代码
-9.22×10^18 到 9.22×10^18

4、所以:

复制代码
2^60

复制代码
1.15×10^18

还能放进去。


复制代码
2^63

就爆掉了。


六、常见竞赛结论

情况1

指数很小

例如:

复制代码
pow(2,10)
pow(3,8)

可以直接用。


情况2

结果要作为整数参与判断

例如:

复制代码
if(pow(2,n)==1024)

不推荐。


应该写:

复制代码
long long ans=1;

for(int i=1;i<=n;i++)
    ans*=2;

情况3

计算平方

不要写:

复制代码
pow(x,2)

直接:

复制代码
x*x

更快。


七、GESP和NOIP竞赛中的经验

1、要看指数大小

(1)可以放心使用

复制代码
pow(2,10)

pow(3,5)

pow(5,6)

(2)需要小心

复制代码
pow(2,50)

pow(3,30)

pow(10,18)

2、不建议用于精确整数计算

复制代码
pow(2,n)

然后直接转:

复制代码
long long

特别是:

复制代码
n > 50

容易出问题。


3、给小学生的建议

(1)记住两个重点:

✅ 返回值是 double

✅ 特别大的指数可能出现精度误差


(2)所以在信息学竞赛里:

  • 求平方 → x*x

  • 求整数次幂 → 循环乘法或快速幂

  • pow() 更适合数学计算和演示指数概念


4、在算法提高阶段,我们专门学习一门神器:

⚔️《快速幂》⚔️

它能在 O(log n) 时间内计算:

2^{1000000000}

这样的超级大指数,这才是竞赛中的标准做法。


下一课:

⚔️《超级银行家------复利增长》⚔️

我们将学习:

  • 利滚利

  • 复利公式

  • 指数函数真正的威力

并且第一次接触现实世界中的指数模型。🚀


相关推荐
旖-旎1 小时前
FloodFill(图像渲染)(1)
c++·算法·深度优先·力扣
汉克老师2 小时前
GESP2026年3月认证C++六级真题与解析(编程题1 选数)
c++·动态规划·线性dp·gesp六级·状态转移·选与不选
有点。3 小时前
C++倍增法(练习题)
c++·算法
凡人叶枫3 小时前
Effective C++ 条款23:宁以 non-member、non-friend 替换 member 函数
linux·开发语言·c++·嵌入式开发
C语言小火车3 小时前
什么时候用智能指针?什么时候用裸指针?
c语言·c++·学习·指针
玖玥拾4 小时前
C/C++ 基础笔记(十二)友元、运算符重载
c语言·c++·运算符重载·友元
智者知已应修善业4 小时前
【51单片机8位数码管同时倒计时从9999】2024-1-25
c++·经验分享·笔记·算法·51单片机
郝学胜_神的一滴5 小时前
Qt 高级开发 031:QListWidget图标布局实战
c++·qt
Coder-magician6 小时前
《代码随想录》刷题打卡day15:二叉树part05
数据结构·c++·算法