题解
2026-02-05 22:49:57
发布于:浙江
8阅读
0回复
0点赞
题目解析
- 输入输出:第一行输入整数 (表示数字个数),接下来 行每行输入一个正整数 ;若 个数的乘积超过 ,输出
>1000000,否则输出乘积值。 - 数据范围:,。由于 远超标准数据类型范围,必须在乘积超过 时立即终止,避免溢出。
- 复杂度要求:时间复杂度 (最多 50 次乘法),空间复杂度 。
- 算法知识点:
模拟、循环、提前终止(短路)、边界判断
思路解析
- 初始化:设置累乘器
ans初始值为 1(乘法单位元)。 - 边乘边判:对于每个输入的数,立即与
ans相乘更新结果。 - 关键剪枝:每次乘法后检查当前乘积是否已超过 (即
1000000)。一旦超过,立即输出结果并终止程序,防止后续乘法导致数据溢出。 - 正常结束:若遍历完所有 个数均未触发超限条件,则输出最终的累乘结果。
完整代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
int ans = 1; // 存储当前乘积
while (t--) {
int x;
cin >> x;
ans *= x; // 累乘当前数
// 关键判断:乘积一旦超过1e6立即输出并退出
// 注意:pow(10,6)返回double,但10^6可精确表示,此处比较安全
if (ans > pow(10, 6)) {
cout << ">1000000" << endl;
return 0; // 直接终止程序,避免后续计算溢出
}
}
cout << ans << endl;
return 0;
}
这里空空如也

有帮助,赞一个