常见小技巧
分类: 基础语法
· 更新时间 2026-5-27 21:40:57
交换两个变量的值
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 的好处:乘以 不会爆 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 按字节赋值,所以只能用于 、、0x3f 等每字节相同的值。
防止爆 int
- 计算过程中随时注意结果是否会超过
- 使用
1LL * a * b进行long long乘法 - 在需要的地方使用
#define int long long
调试小技巧
// 在代码中使用 cerr 输出调试信息(不会影响 OJ 评判)
cerr << "debug: a = " << a << "";
// 输出当前行号
cerr << __LINE__ << "";
// 可以用 if 包裹,方便最后一起删除
if (false)
cerr << "debug: " << x << "";