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 循环

  • 阶乘

  • 乘法判断


相关推荐
草莓熊Lotso3 小时前
【Linux网络】深入理解 HTTP 协议(四):完善 C++ HTTP 服务器:从协议原理到生产级实现
linux·运维·服务器·c语言·网络·c++·http
黎阳之光3 小时前
数字孪生赋能智慧油站建设|黎阳之光全场景可视化安防管控平台落地应用
大数据·物联网·算法·安全·数字孪生
牛油果子哥q3 小时前
【C++前置声明与头文件】C++前置声明与头文件深度精讲:重复包含、循环依赖、重复定义报错、工程编译架构与实战解决方案
开发语言·c++
少司府3 小时前
C++进阶:map和set的使用
开发语言·数据结构·c++·容器·stl·set·map
程序喵大人4 小时前
C++ 程序员转型 AI Infra 学习路线
c++·人工智能·学习·ai infra
cpp_25014 小时前
P11375 [GESP202412 六级] 树上游走
数据结构·c++·算法·题解·洛谷·树形结构·gesp六级
小雨下雨的雨4 小时前
鸿蒙PC用Electron框架 实现 房产交易系统核心算法深度解析
前端·javascript·算法·华为·electron·鸿蒙系统
CQU_JIAKE4 小时前
6.3[a]
算法
此生决int4 小时前
算法从入门到精通——字符串
数据结构·c++·算法·蓝桥杯
bIo7lyA8v4 小时前
算法复杂度下限证明与优化空间分析的技术8
算法