01-基础语法/09-常见小技巧:修订间差异
跳转到导航
跳转到搜索
->Importer 批量导入三三文档 |
小 导入1个版本 |
(没有差异)
| |
2026年5月20日 (三) 18:12的最新版本
交换两个变量的值
swap(a, b);
最大公因数与最小公倍数
比赛时允许使用 C++ 自带的 __gcd(a, b) 函数求最大公因数。
手写版本:
int gcd(int a, int b)
{
if (b == 0)
return a;
return gcd(b, a % b);
}
int lcm(int a, int b)
{
return a / gcd(a, b) * b;
}
数组大小计算
int a[100];
int n = sizeof(a) / sizeof(a[0]); // n = 100
常见常量定义
const int MOD = 1000000007; // 常用模数
const int INF = 0x3f3f3f3f; // 常用无穷大
const long long INFLL = 0x3f3f3f3f3f3f3f3f; // long long 无穷大
0x3f3f3f3f 的好处:乘以 [math]\displaystyle{ 2 }[/math] 不会爆 int,且 memset(a, 0x3f, sizeof(a)) 可以直接把每个元素初始化为它。
memset 初始化数组
#include <cstring>
int a[100];
memset(a, 0, sizeof(a)); // 全部初始化为 0
memset(a, -1, sizeof(a)); // 全部初始化为 -1
memset(a, 0x3f, sizeof(a)); // 全部初始化为 INF
注意:memset 按字节赋值,所以只能用于 [math]\displaystyle{ 0 }[/math]、[math]\displaystyle{ -1 }[/math]、0x3f 等每字节相同的值。
防止爆 int
- 计算过程中随时注意结果是否会超过 [math]\displaystyle{ 2\times 10^9 }[/math]
- 使用 1LL * a * b 进行 long long 乘法
- 在需要的地方使用 #define int long long
调试小技巧
// 在代码中使用 cerr 输出调试信息(不会影响 OJ 评判)
cerr << "debug: a = " << a << "\n";
// 输出当前行号
cerr << __LINE__ << "\n";
// 可以用 if 包裹,方便最后一起删除
if (false)
cerr << "debug: " << x << "\n";