题目解析
* 输入输出:第一行输入整数 nnn(表示数字个数),接下来 nnn 行每行输入一个正整数 aaa;若 nnn 个数的乘积超过 10610^6106,输出 >1000000,否则输出乘积值。
* 数据范围:n≤50n \leq 50n≤50,a≤100a \leq 100a≤100。由于 10050100^{50}10050 远超标准数据类型范围,必须在乘积超过 10610^6106 时立即终止,避免溢出。
* 复杂度要求:时间复杂度 O(n)O(n)O(n)(最多 50 次乘法),空间复杂度 O(1)O(1)O(1)。
* 算法知识点:模拟、循环、提前终止(短路)、边界判断
思路解析
1. 初始化:设置累乘器 ans 初始值为 1(乘法单位元)。
2. 边乘边判:对于每个输入的数,立即与 ans 相乘更新结果。
3. 关键剪枝:每次乘法后检查当前乘积是否已超过 10610^6106(即 1000000)。一旦超过,立即输出结果并终止程序,防止后续乘法导致数据溢出。
4. 正常结束:若遍历完所有 nnn 个数均未触发超限条件,则输出最终的累乘结果。
完整代码