复赛一:乘方(pow)

洛谷:p8813
OJ:P4974

数据范围:
b=1 10分,
b<=2 30分 a*a
b<=30, ab= <1018 结果超整数范围了。但在long long范围内 263
1=<a,b=<109 a=2, b=30时候230就大于109

代码实现:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**************************************************************** 
 * Description: 2022年普及组复赛  乘方
 * Author: Alex Li
 * Date: 2023-09-18 10:42:27
 * LastEditTime: 2024-09-21 19:48:38
****************************************************************/
#include <iostream>
using namespace std;

int a, b;

int main() {
    cin >> a >> b;
    
    // 初始化结果为 1,因为任何数的 0 次幂都是 1
    long long ans = 1;

    // 如果 a 是 1,无论 b 的值是多少,结果始终为 1
    if (a == 1) {
        cout << 1 << endl;
        return 0;
    }

    // 逐次累乘 a,直到 b 变为 0 或者结果超过 10^9
    while (b > 0 && ans <= 1e9) {
        ans *= a;  // 每次将结果乘以 a
        b--;       // 减少 b 的值,直到 b 次乘法完成
    }

    // 如果累乘结果超过了 10^9,输出 -1 表示超出范围
    if (ans > 1e9) {
        cout << -1 << endl;
        return 0;
    }

    // 否则输出正确的乘积结果
    cout << ans << endl;

    return 0;
}

直接用pow函数不行,报表,只得70分。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#include <iostream>
using namespace std;

int main(){
    int a,b,c;
    cin>>a>>b;
     long long ans=1;//ans要大
    c=1000000000;
  ans=pow(a,b);
    cout<<ans;
}
Scroll to Top