【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
题目分析
解题思路
- 首先,我们需要理解题目的核心要求:
- 计算 $a^b$ 的末3位数字
- 不足3位需要在前面补0
- 解题思路:
- 直接计算 $a^b$ 会导致数字过大,超出整型范围
- 我们只需要关注末3位数字,可以在每次计算时只保留末3位
- 具体做法是每次乘法后对1000取模
- 具体实现:
- 读入底数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 进行授权