C++ 竞赛入门
数据类型
数据类型
本节学会什么
- 为整数、小数、字符和真假选择合适的类型
- 区分
int、long long、double、char、bool - 在竞赛中先估计数据范围,再决定类型
为什么需要它
计算机不会把所有数字都用同一种方式保存。分数需要小数,人数通常是整数,长度可能大到超出 int 范围。类型选错时,程序即使能运行,答案也可能悄悄出错。
最小可运行示例
#include <iostream>
int main() {
int students = 42;
long long population = 1400000000LL;
double average = 87.5;
char grade = 'A';
bool passed = true;
std::cout << students << '\n';
std::cout << population << '\n';
std::cout << average << '\n';
std::cout << grade << '\n';
std::cout << passed << '\n';
return 0;
}
在 GNU C++17 常见竞赛环境中,int 通常能表示约 -2e9 到 2e9,long long 能表示约 -9e18 到 9e18。不要依赖 float 保存需要精确比较的小数,默认优先使用 double。
关键过程与易错点
| 类型 | 适合表示 | 常见错误 |
|---|---|---|
int |
小范围整数、下标、计数 | 用它保存很大的乘积。 |
long long |
大范围整数、总和、乘积 | 忘记在很大的常量后加 LL。 |
double |
平均数、长度、比例 | 用 == 比较计算得到的小数。 |
char |
单个字符,如 'A' |
把字符 '1' 当成整数 1。 |
bool |
真或假 | 用它保存多个状态。 |
表达式的类型也很重要:int a = 3, b = 2; 时,a / b 的结果是 1。想得到 1.5,至少有一个操作数必须是 double,例如 1.0 * a / b。
动手检查
分别输出 sizeof(int)、sizeof(long long)、sizeof(double)。再计算 3 / 2 和 3.0 / 2,写下两次输出为什么不同。
立即练习
| 难度 | 题目 | 题解 | 训练目标 |
|---|---|---|---|
| 基础 | 洛谷 P5703:苹果采购 | 题解 | 用 int 保存数量和单价,计算整数结果。 |
| 巩固 | 洛谷 P5706:再分肥宅水 | 题解 | 区分整数人数和 double 类型的平均量。 |
| 挑战 | 洛谷 P5708:三角形面积 | 题解 | 使用 double 完成带平方根的计算。 |