文章

【GESP】C++二级练习 luogu-B2075 幂的末尾

GESP二级练习,多层循环和分支练习,难度★★☆☆☆。

luogu-B2075 幂的末尾

题目要求

题目描述

幂 $a^b$ 的末 $3$ 位数是多少?

输入格式

两个正整数 $a$,$b$。$1 \le a \le 100$,$1 \le b \le 10000$。

输出格式

从高位到低位输出幂的末三位数字,中间无分隔符。若幂本身不足三位,在前面补零。

输入 #1

1
2 3

输出 #1

1
008

输入 #2

1
7 2011

输出 #2

1
743

题目分析

解题思路

  1. 首先,我们需要理解题目的核心要求:
    • 计算 $a^b$ 的末3位数字
    • 不足3位需要在前面补0
  2. 解题思路:
    • 直接计算 $a^b$ 会导致数字过大,超出整型范围
    • 我们只需要关注末3位数字,可以在每次计算时只保留末3位
    • 具体做法是每次乘法后对1000取模
  3. 具体实现:
    • 读入底数a和指数b
    • 用一个变量ans记录当前结果,初始值为a
    • 循环b-1次:
      • 每次将ans乘以a
      • 取乘积的末3位(对1000取模)存回ans
    • 最后输出ans的3位数字,不足补0


示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <cstdio>
#include <iostream>

using namespace std;
int main() {
    int a, b; // 定义底数a和指数b
    cin >> a >> b; // 读入底数a和指数b
    int ans = 1; // 初始化结果ans为1
    for (int i = 1; i <= b; i++) { // 循环b次
        int u = ans * a; // 计算当前结果乘以底数a
        ans = u % 1000; // 取乘积的末3位存回ans
    }
    printf("%03d", ans); // 输出结果的3位数字,不足补0
    return 0; // 返回0,表示程序正常结束
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页

luogu-”系列题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

bcqm-”系列题目可在编程启蒙题库进行在线评测。

本文由作者按照 CC BY 4.0 进行授权