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


🌟《乘法问题》


一、🎬 小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 循环

  • 阶乘

  • 乘法判断


相关推荐
论文复现现场22 分钟前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
ZhengEnCi24 分钟前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
TMedical41 分钟前
MedPlanning 截骨模拟矫形功能
c++·图像处理·人工智能·qt·健康医疗
qq_406981031 小时前
共享变量一 关于extern与const
开发语言·c++
秋天的怀念_David1 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
碧海银沙音频科技研究院2 小时前
在PC电脑上用Whisper→Marian算法实现离线语音翻译功能
算法·whisper
niyongsheng3 小时前
3D 装箱算法工程化:数据结构、放置启发式与支撑规则
数据结构·算法·rust
chari克里3 小时前
QT5.15.2 + msvc2022部署全流程说明(windows可联网环境)
开发语言·c++·qt
码匠许师傅4 小时前
【C++三方组件】mbedTLS:面向嵌入式的轻量 TLS
开发语言·c++
?re?ta?rd?ed?5 小时前
C++11新特性,{}与左值
c++·windows