



🌟《乘法问题》
一、🎬 小A的乘法挑战
1、小A刚学会乘法,特别开心 😄
老师给了他很多正整数,让他把这些数全部乘起来。
(1)比如:
cpp
3
5
(2)小A会算:
cpp
3 × 5 = 15
(3)输出结果是15
2、⚠ 但是有一个规定:
(1)如果乘积 超过 1000000(100万) ,
小A就会晕掉 🤯,不会算了。
(2)这时候我们要输出:
cpp
>1000000
二、🌟 题目真正要我们做什么?
1️⃣ 读入 n(有多少个数)
cpp
int n;
cin >> n;
2️⃣ 读入 n 个整数
cpp
for (int i = 0; i < n; ++i) {
int a;
cin >> a;
3️⃣ 把它们全部乘起来
cpp
long long product = 1;
for (int i = 0; i < n; ++i) {
int a;
cin >> a;
product *= a;
}
4️⃣ 如果乘积 > 1000000
输出:>1000000
否则
输出乘积
cpp
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、假设输入:
cpp
3
100
100
100
你算算:
cpp
100 × 100 = 10000
10000 × 100 = 1000000
刚好 1000000,可以输出。
2、如果输入:
cpp
4
100
100
100
2
算到:
cpp
1000000 × 2 = 2000000
超过 1000000!
所以要输出:
cpp
>1000000
四、🌟 解题关键思想
1、💡 我们可以"边乘边检查"
不要等全部乘完才判断!
如果中途已经超过 1000000,
立刻停止!
2、这样:
✔ 更安全
✔ 不会溢出
✔ 更快
五、🎯 思路步骤图
① product = 1
② 读入一个数 a
③ 如果 product × a > 1000000
立刻输出并结束
④ 否则
product *= a
⑤ 重复
六、🧩 参考程序:
cpp
#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?
考试中,好习惯是用:
cpp
long long
更安全。
八、🎯 本题考察知识点
| 知识 | 是否重要 |
|---|---|
| for 循环 | ⭐⭐⭐⭐ |
| 累乘 | ⭐⭐⭐ |
| 提前终止 return | ⭐⭐⭐⭐ |
| 数据类型 | ⭐⭐⭐ |
九、🧩课后训练题:
(一)、🌟 训练题 1(⭐ 基础版)------ 连加限制
1、📝 题目
输入 n 个正整数,把它们依次相加。
如果和 超过 500000,立刻输出:
cpp
>500000
否则输出总和。
2、🧠 思路
和乘法题一模一样!
区别:
-
原来是乘法
-
现在是加法
3、💻 参考程序
cpp
#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,输出:
cpp
Too Large
否则输出乘积。
2、🧠 关键升级
这题推荐写成:
cpp
if(product > 2000000 / a)
避免溢出!
3、💻 参考程序
cpp
#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,输出:
cpp
Overflow
否则输出 n!。
2、🧠 思路
cpp
1 × 2 × 3 × ... × n
边乘边判断。
3、💻 参考程序
cpp
#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 循环
-
阶乘
-
乘法判断