【信息学竞赛必知】为什么 C++ 里有时候要写 LL?
作者:野牛程序员:2025-09-27 18:31:48C++阅读 2350
为什么 C++ 里有时候要写 LL?
为什么 C++ 里有时候要写 LL?
写 C++ 的时候,常常能看到别人代码里在数字后面加个 LL,比如 1000000000000LL。
初学时可能会纳闷:直接写 1000000000000 不行吗?
答案是 —— 不一定行。
故事从一个“溢出”说起
想象一下,有个需求:计算一个长方形的面积。宽和高都在十万级别:
#include <bits/stdc++.h>
using namespace std;
int main() {
int w = 100000, h = 100000;
long long area = w * h;
cout << "ans1 = " << area << endl;
}结果一打印,
ans1 = 1410065408
发现面积完全不对!
问题出在哪?
w和h的类型是int。在 C++ 里,两个
int相乘,结果还是int,中间步骤就炸了。等结果溢出完,才丢给
long long,已经晚了。
于是就有人写成这样:
long long area = 1LL * w * h;
这里的 1LL 把整个表达式的运算提升到 long long,保证计算不出问题。
那么,LL 究竟干了什么?
在 C++ 里,数字常量(比如 123456)默认是 int 类型。
如果加了 LL,就变成 long long 类型。
所以:
1000是int。1000L是long。1000LL是long long。
看起来只是个小尾巴,其实直接决定了运算过程的精度。
常见用法
防止中间运算溢出
long long sum = 1LL * n * (n + 1) / 2;
如果
n在10^9级别,少了LL,分分钟溢出。写大常量
const long long LIMIT = 1000000000000LL;
这样一看就知道是
long long常量,避免类型歧义。算法题必备套路
凡是涉及平方、乘法、组合数的地方,写个1LL基本能保命。
总结一句话
LL 就像给数字戴了个“安全头盔”。
在需要大数运算的场景里,它能防止意外溢出,让结果更可靠。
所以,遇到 10^9、10^12 这种量级,写个 LL,既是习惯,也是保险。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

