1、寄语
- 希望大家能够养成写题解的习惯
- 请大家独立完成代码
- 知其然也要知其所以然,多问几个为什么
2、floor和ceil函数
- floor函数:其功能是“向下取整”,即取不大于x的最大整数
- ceil函数:其功能是“上取整”,即取不小于给定值的最小整数
#include <math.h>
#include <stdio.h>
int main()
{
double x;
scanf("%lf",&x);
printf("%lf\n",floor(x));
printf("%lf\n",ceil(x));
return 0;
}
3、数据类型
int类型
- int 32位二进制
- long long 64位二进制
- unsigned用于修饰int或者long long,将符号位变为数值位
浮点类型
-
double 64位二进制 科学计数法存储
-
0.3转化为二进制一直乘2,乘2,造成无限循环,52位也存不下,会造成精度缺失。我们在判断a和b是否相等时,判断的标准为: ∣ a − b ∣ ≤ 1 0 − 9 / 1 0 − 6 ( e p s ) |a-b| \leq10^{-9}/10^{-6}(eps) ∣a−b∣≤10−9/10−6(eps)。
char和bool类型
- char 8位二进制
- bool只有0和1 8位二进制
4、内存
计算变量所占的空间
- 8位二进制=1个字节
- 1024字节=1KB
- 1024KB=1MB
- 1024MB=1GB
比赛时题目的空间限制位512M,在没有递归等其他消耗下,且只需要开一个int类型的数组,那么这个数组最大可以开到什么数量级?
(512 * 1024 * 1024 * 8) / 32
一个长度为
1
0
6
10^6
106的double类型数组占多少空间(说出数量级即可)?
(
1
0
6
∗
64
)
/
(
8
∗
1024
∗
1024
)
≈
8
M
(10^6 * 64 ) / (8 * 1024 * 1024) ≈8M
(106∗64)/(8∗1024∗1024)≈8M
在一个题目中,1e8的数组已经为上限