C++: 乘方 - CSP-J 2022 题解

题目描述

小文同学刚刚接触了信息学竞赛,有一天她遇到了这样一个题:给定正整数 'a' 和 'b',求 'a^b' 的值是多少。

'a^b' 即 'b' 个 'a' 相乘的值,例如 '2^3' 即为 '3' 个 '2' 相乘,结果为 '2 × 2 × 2 = 8'。

'简单!' 小文心想,同时很快就写出了一份程序,可是测试时却出现了错误。

小文很快意识到,她的程序里的变量都是 int 类型的。在大多数机器上,int 类型能表示的最大数为 '2^31 - 1',因此只要计算结果超过这个数,她的程序就会出现错误。

由于小文刚刚学会编程,她担心使用 int 计算会出现问题。因此她希望你在 'a^b' 的值超过 '10^9' 时,输出一个 '-1' 进行警示,否则就输出正确的 'a^b' 的值。

然而小文还是不知道怎么实现这份程序,因此她想请你帮忙。

输入格式

输入共一行,两个正整数 'a, b'。

输出格式

输出共一行,如果 'a^b' 的值不超过 '10^9',则输出 'a^b' 的值,否则输出 '-1'。

样例 #1

样例输入 #1

10 9

样例输出 #1

1000000000

样例 #2

样例输入 #2

23333 66666

样例输出 #2

-1

提示

对于 '10%' 的数据,保证 'b = 1'。 对于 '30%' 的数据,保证 'b ≤ 2'。 对于 '60%' 的数据,保证 'b ≤ 30','a^b ≤ 10^18'。 对于 '100%' 的数据,保证 '1 ≤ a, b ≤ 10^9'。

解题思路

  1. 数据类型选择: 由于题目要求计算结果可能超过 'int' 类型的表示范围,我们需要选择更大的数据类型,例如 long long
  2. 循环计算: 我们可以使用循环来计算 'a^b' 的值。
  3. 判断结果: 在计算过程中,我们需要判断结果是否超过 '10^9',如果超过则输出 '-1',否则继续计算。

代码实现

#include <iostream>

using namespace std;

int main() {
    long long a, b, result = 1;
    cin >> a >> b;
    
    for (int i = 1; i <= b; i++) {
        result *= a;
        if (result > 1000000000) {
            result = -1;
            break;
        }
    }
    
    cout << result << endl;
    
    return 0;
}

代码解析

  1. long long a, b, result = 1;: 声明变量,使用 long long 类型存储 'a', 'b' 和结果 'result',并将 'result' 初始化为 '1'。
  2. for (int i = 1; i <= b; i++): 使用循环遍历 'b' 次。
  3. result *= a;: 在每次循环中,将 'result' 乘以 'a'。
  4. if (result > 1000000000) {...}: 判断结果 'result' 是否超过 '10^9',如果超过则将 'result' 设置为 '-1',并使用 break 退出循环。
  5. cout << result << endl;: 输出计算结果 'result'。

总结

本题主要考察了数据类型选择、循环计算和数据溢出判断。通过本题的学习,我们可以掌握基本的 C++ 编程技巧和乘方算法的实现方法。

注意:

  • 在使用 long long 类型进行计算时,需要注意数据溢出问题。
  • 在实际应用中,根据具体情况选择合适的算法和数据类型。
C++ 乘方算法详解 - CSP-J 2022 乘方 题解

原文地址: https://www.cveoy.top/t/topic/pgz2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录