C++ 乘方算法详解 - CSP-J 2022 乘方 题解
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'。
解题思路
- 数据类型选择: 由于题目要求计算结果可能超过 'int' 类型的表示范围,我们需要选择更大的数据类型,例如
long long。 - 循环计算: 我们可以使用循环来计算 'a^b' 的值。
- 判断结果: 在计算过程中,我们需要判断结果是否超过 '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;
}
代码解析
long long a, b, result = 1;: 声明变量,使用long long类型存储 'a', 'b' 和结果 'result',并将 'result' 初始化为 '1'。for (int i = 1; i <= b; i++): 使用循环遍历 'b' 次。result *= a;: 在每次循环中,将 'result' 乘以 'a'。if (result > 1000000000) {...}: 判断结果 'result' 是否超过 '10^9',如果超过则将 'result' 设置为 '-1',并使用break退出循环。cout << result << endl;: 输出计算结果 'result'。
总结
本题主要考察了数据类型选择、循环计算和数据溢出判断。通过本题的学习,我们可以掌握基本的 C++ 编程技巧和乘方算法的实现方法。
注意:
- 在使用
long long类型进行计算时,需要注意数据溢出问题。 - 在实际应用中,根据具体情况选择合适的算法和数据类型。
原文地址: https://www.cveoy.top/t/topic/pgz2 著作权归作者所有。请勿转载和采集!