喵~ 各位程序员哥哥姐姐们好呀,我是你们的专属解题猫娘!今天我们要看的是一道来自 Codeforces 的可爱题目,A. Wrong Subtraction。这道题就像是和小猫玩耍一样简单有趣,我们一起来看看吧!
题目大意
这道题讲了一个叫 Tanya 的小女孩学习减法的趣事,喵~。
Tanya 的减法规则有点特别:
- 如果一个数的最后一位不是 0,她就会把这个数减 1。
- 如果一个数的最后一位是 0,她就会把这个数除以 10(也就是去掉最后一位的 0)。
题目会给我们两个整数 n
和 k
。我们需要做的就是,对数字 n
重复 k
次 Tanya 的奇特减法操作,然后输出最后得到的结果。
举个栗子:如果 n = 512
, k = 4
,Tanya 的计算过程是这样的: 512
→ 511
(最后一位是 2,非 0,减 1) 511
→ 510
(最后一位是 1,非 0,减 1) 510
→ 51
(最后一位是 0,除以 10) 51
→ 50
(最后一位是 1,非 0,减 1)
经过 4 次操作,最后的结果就是 50 啦!
解题思路
这道题最关键的地方在于 k
的值非常小(1 ≤ k ≤ 50
)。这意味着我们只需要老老实实地按照 Tanya 的规则,一步一步地模拟她的操作 k
次,就能得到答案了,完全不需要什么复杂的算法,是不是很简单呀?
具体的思路就是:
- 我们用一个循环,让它重复
k
次。 - 在每次循环里,我们检查一下当前数字
n
的最后一位是什么。 - 要得到一个数的最后一位,我们可以用取模运算
%
。n % 10
得到的就是n
的个位数。 - 如果
n % 10 == 0
,说明最后一位是 0,我们就执行n = n / 10
。 - 如果
n % 10 != 0
,说明最后一位不是 0,我们就执行n = n - 1
。 - 循环
k
次之后,n
的值就是我们想要的答案啦,直接输出就好!
AC 代码详解
下面是这道题的 C++ 参考代码,我已经加上了猫娘的专属注释,希望能帮助你更好地理解哦,喵~
cpp
#include <iostream>
// 这是解决 Codeforces "Wrong Subtraction" 问题的程序哦。
// 题目描述了一种特殊的数字递减算法,我们需要把它应用 k 次。
void solve() {
long long n; // n 最大可以到 10^9,所以用 long long 比较保险
int k; // k 最大只有 50,用 int 就足够啦
std::cin >> n >> k;
// 我们需要重复 k 次减法操作,所以用一个 for 循环是最好的选择!
for (int i = 0; i < k; ++i) {
// 检查 n 的最后一位数字。
// 用 n % 10 就能轻松得到最后一位啦,这是个常用的小技巧!
if (n % 10 == 0) {
// 如果最后一位是 0,就把它“吃掉”(除以 10)
n /= 10;
} else {
// 如果最后一位不是 0,就乖乖地减 1
n--;
}
}
// k 次操作之后,把最后的结果打印出来~
std::cout << n << '\n';
}
int main() {
// 这两行是为了让输入输出变得更快一点,在比赛里很有用哦!
// std::ios_base::sync_with_stdio(false) 解除 C++ 流和 C 标准流的同步
// std::cin.tie(nullptr) 防止 cin 在每次输入时刷新 cout
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
solve();
return 0;
}
知识点小课堂
这道题虽然简单,但是里面用到的几个知识点可是编程入门的基石呢!让猫娘来给你梳理一下吧~
循环语句 (
for
loop)for
循环非常适合用来执行固定次数的操作。在这道题里,我们需要执行k
次操作,所以for (int i = 0; i < k; ++i)
就完美地满足了我们的需求。
条件语句 (
if-else
statement)if-else
语句用于根据不同的条件执行不同的代码块。在这里,我们需要根据“最后一位是否为0”这个条件来决定是做除法还是做减法,if-else
正是为此而生的!
取模运算符 (
%
)- 这是一个非常神奇的运算符!
a % b
的结果是a
除以b
的余数。 - 当
b
等于 10 时,n % 10
就能巧妙地取出整数n
的个位数。比如512 % 10
的结果是2
,510 % 10
的结果是0
。这是处理数字各位的必备技巧!
- 这是一个非常神奇的运算符!
整除运算符 (
/
)- 在 C++ 中,当两个整数相除时,结果会自动取整(舍弃小数部分)。
- 所以
n / 10
就能实现“去掉n
的最后一位”这个效果。比如512 / 10
的结果是51
。
好啦,这次的题解就到这里结束啦!是不是感觉很简单呢?只要掌握了这些基础知识,很多问题都能迎刃而解的。下次再见咯,喵~!