题解 | #操作#
操作
https://ac.nowcoder.com/acm/contest/99072/I
题解:操作
问题描述
给定一个整数 (n),我们需要执行 (k) 次操作,每次操作根据 (n) 是否是 200 的倍数进行不同的处理。
操作规则:
- 如果 (n) 是 200 的倍数,则将 (n) 除以 200。
- 否则,将 (n) 视为字符串,并在其末尾附加 "200"(即将 (n) 乘以 1000 然后加 200)。
输入描述:
- 输入包含两个整数 (n) 和 (k),其中 (n) 表示初始整数,(k) 表示需要执行的操作次数。
输出描述:
- 输出经过 (k) 次操作后的结果。
示例1:
输入:
7 1
输出:
7200
示例2:
输入:
2021 4
输出:
50531
备注:
- 1 ≤ (n) ≤ 100,000
- 1 ≤ (k) ≤ 20
解题思路
本题的核心是模拟给定的操作。我们需要执行的操作次数 (k) 最大为 20,且每次操作都比较简单。操作的步骤如下:
- 判断 (n) 是否是 200 的倍数。
- 如果是,除以 200。
- 如果不是,将 (n) 当作一个字符串处理,拼接 "200" 到末尾,实际上是将 (n) 乘以 1000 加 200。
关键点:
- 字符串拼接操作:将数字变成字符串并追加 "200" 的操作可以通过数学计算模拟,直接把 (n) 乘以 1000 后加上 200 即可。
- 循环操作:需要进行 (k) 次操作,且每次操作的结果会影响下一次操作的输入。
代码实现
#include<bits/stdc++.h>
using namespace std;
int main() {
long long n;
int k;
cin >> n >> k;
// 执行 k 次操作
for (int i = 1; i <= k; i++) {
if (n % 200 == 0) {
n /= 200; // 如果是 200 的倍数,除以 200
} else {
n = n * 1000 + 200; // 否则,拼接 "200"
}
}
cout << n << endl; // 输出结果
return 0;
}
