♐ CSP_J 组真题
2022年
1. 乘方

线上OJ:

https://www.jisuanke.com/problem/T3730 (opens in a new tab)
https://www.luogu.com.cn/problem/P8813 (opens in a new tab)

核心思想:

1、对 a=1 和 b=1 进行特判
2、为了防止超过1e9, 故采用两遍同除一个 a 的方法

题解代码:

#include <bits/stdc++.h>
using namespace std;
int a, b;  //定义a和b
int main()
{
    cin >> a >> b;  //输入a和b
    if (a==1) 
	{  //对a=1进行特判
        cout << 1 << endl;  //如果a=1,无论多少次乘方,结果仍然为1
        return 0;  //退出程序
    }
    if (b==1) 
	{  //对b=1进行特判
        cout << a << endl;  //如果b=1,无论多少次乘方,结果为a
        return 0;  //退出程序
    }
    int ans = 1;  //定义ans
    for (int i=1; i<=b; i++) 
	{  //循环b次
        if (ans > 1e9 / a) 
		{  //不等式移向判断,解决等式两边超过1e9的情况
            ans = -1;  //如果输出结果超过10^9,结果为-1
            break;  //退出循环
        }
        else ans *= a;  //否则计算得到结果
    }
    cout << ans << endl;  //输出a^b的值
    return 0;
}