TB椰程 TypeBuddy 打字搭子

2022 乘方 · 方案一 边乘边判断

CSP-J 标程 · 复赛真题 · 代码 · cpp · 难度 1/5 · 共 906 字

一超过 1e9 就收工,a 等于 1 要特判

  • 2022
  • 快速幂

正文

// CSP-J 2022 复赛 T1 · 乘方
// 原题:https://oj.yecheng.tv/p/CSPJ2022A
// 题意:算 a 的 b 次方。如果结果超过 10^9 就输出 -1,否则输出准确值。
// 注意 a、b 都能到 1e9,真正的答案会大到无法想象,所以不能老老实实乘完再比。
//
// 方案一 · 边乘边判断(最简单的满分写法)
// 用一个 long long 存答案,每乘一次就检查一次:一旦超过 1e9 立刻输出 -1 收工。
// 这样最多乘 30 次就会退出(2^30 已经超过 1e9),完全不会溢出。
// 唯一的坑:a == 1 时永远不会超过 1e9,循环会跑满 b 次(b 高达 1e9),必须先特判。

#include <bits/stdc++.h>
using namespace std;

const long long LIM = 1000000000LL;

int main() {
    freopen("pow.in", "r", stdin);
    freopen("pow.out", "w", stdout);

    long long a;
    int b;
    cin >> a >> b;

    if (a == 1) {                      // 1 的任何次方都是 1,别去乘 1e9 次
        cout << 1 << "\n";
        return 0;
    }

    long long ans = 1;
    for (int i = 1; i <= b; i++) {
        ans *= a;
        if (ans > LIM) {               // 已经超了,后面不用再算
            cout << -1 << "\n";
            return 0;
        }
    }
    cout << ans << "\n";
    return 0;
}

CSP-J 标程 · 复赛真题的其它内容

打字首页 · 词库画廊 · 编程打字 · 指法入门 · 天梯榜 · 数据分析 · 班级课堂 · 关于我们
椰程 TypeBuddy 打字搭子 —— 键盘指法练习 · 单词记忆 · 班级课堂 · 在线 PK