有时候我们需要计算一个数组前k个元素的乘积,但是数据范围如果较大,存储乘积的变量即使开成long long范围也会爆,这时我们可以在每次乘元素之前判断乘完之后是否会超过INF,来防止前缀积过大。
const long long INF = 1000000000000000000;
int n;
cin >> n;
vector<long long> a(n);
for (int j = 0; j < n; j++){
cin >> a[j];
}
long long P = 1;
bool big = false;
for (int j = 0; j < n; j++){
if (P >= (INF + a[j] - 1) / a[j]){
big = true;
break;
} else {
P *= a[j];
}
}