GESP2024年3月认证C++二级( 第三部分编程题(1) 乘法问题)

📅 发布时间:2026/7/13 1:34:07 👁️ 浏览次数:
GESP2024年3月认证C++二级( 第三部分编程题(1) 乘法问题)
《乘法问题》一、 小A的乘法挑战1、小A刚学会乘法特别开心 老师给了他很多正整数让他把这些数全部乘起来。1比如3 52小A会算3 × 5 153输出结果是152、⚠ 但是有一个规定1如果乘积超过 1000000100万小A就会晕掉 不会算了。2这时候我们要输出1000000二、 题目真正要我们做什么1️⃣ 读入 n有多少个数int n; cin n;2️⃣ 读入 n 个整数for (int i 0; i n; i) { int a; cin a;3️⃣ 把它们全部乘起来long long product 1; for (int i 0; i n; i) { int a; cin a; product * a; }4️⃣ 如果乘积 1000000输出1000000否则输出乘积long long product 1; for (int i 0; i n; i) { int a; cin a; if (product * a 1000000) { cout 1000000 endl; return 0; } product * a; }三、 实例说明1、假设输入3 100 100 100你算算100 × 100 10000 10000 × 100 1000000刚好 1000000可以输出。2、如果输入4 100 100 100 2算到1000000 × 2 2000000超过 1000000所以要输出1000000四、 解题关键思想1、 我们可以“边乘边检查”不要等全部乘完才判断如果中途已经超过 1000000立刻停止2、这样✔ 更安全✔ 不会溢出✔ 更快五、 思路步骤图① product 1② 读入一个数 a③ 如果 product × a 1000000立刻输出并结束④ 否则product * a⑤ 重复六、 参考程序#include iostream using namespace std; int main() { int n; cin n; // 读入个数 long long product 1; // 用 long long 防止溢出 for(int i 0; i n; i) { int a; cin a; // 先判断是否会超过1000000 if(product * a 1000000) { cout 1000000; return 0; // 立刻结束程序 } product * a; // 累乘 } cout product; return 0; }七、 为什么要用 long long考试中好习惯是用long long更安全。八、 本题考察知识点知识是否重要for 循环⭐⭐⭐⭐累乘⭐⭐⭐提前终止 return⭐⭐⭐⭐数据类型⭐⭐⭐九、课后训练题一、 训练题 1⭐ 基础版—— 连加限制1、 题目输入 n 个正整数把它们依次相加。如果和超过 500000立刻输出500000否则输出总和。2、 思路和乘法题一模一样区别原来是乘法现在是加法3、 参考程序#include iostream using namespace std; int main() { int n; cin n; long long sum 0; for(int i 0; i n; i) { int a; cin a; sum a; if(sum 500000) { cout 500000; return 0; } } cout sum; return 0; }4、 分析考察累加提前终止long long二、 训练题 2⭐⭐—— 连乘防溢1、 题目输入 n 个正整数。如果乘积 ≥ 2000000输出Too Large否则输出乘积。2、 关键升级这题推荐写成if(product 2000000 / a)避免溢出3、 参考程序#include iostream using namespace std; int main() { int n; cin n; long long product 1; for(int i 0; i n; i) { int a; cin a; if(product 2000000 / a) { cout Too Large; return 0; } product * a; } cout product; return 0; }4、 分析这是“乘法问题”的安全升级写法。三、 训练题 3⭐⭐⭐—— 阶乘限制1、 题目输入一个整数 n计算 n!。如果 n! 1000000输出Overflow否则输出 n!。2、 思路1 × 2 × 3 × ... × n边乘边判断。3、 参考程序#include iostream using namespace std; int main() { int n; cin n; long long fact 1; for(int i 1; i n; i) { if(fact 1000000 / i) { cout Overflow; return 0; } fact * i; } cout fact; return 0; }4、 分析考察for 循环阶乘乘法判断