[语言月赛202304G] 扶苏与 1 题解
一扶苏一
·
·
题解
[语言月赛202304G] 扶苏与 1 题解
Source & Knowledge
2023 年 4 月语言月赛,由洛谷网校入门计划/基础计划提供。
本题考查简单构造、循环语句和字符串处理。
文字题解
题目大意
给定 x,请构造 y,使得 x + y 有恰好 k 个进位。
保证 x 的长度不小于 10^{3},k 不大于 x 的长度。x 是非负整数。
构造的 y 必须是正整数,且长度不超过 10^4。
解析
注意到 x 的最高位不为 0,加上 9 一定会产生进位。
$x$ 最高位前面第二位为 $0$,但是受到了它下一位的进位,再加上 $9$ 一定会产生进位。
……
把上述推导重复 $k$ 次,就能构造出 $k$ 个进位。
具体而言,从 $x$ 的最高位向前构造 $k$ 个 $9$,而 $x$ 的次高位到最后一位均为 $0$ 即可。例如,若 $x = 12345$,$k = 4$,只需要令 $y = 99990000$。
注意到只会构造 $k$ 个 $9$,和不超过 $x$ 的长度个 $0$,$y$ 的总长度低于 $x$ 长的的两倍,也就是 $2 \times 10^3$,符合要求。
唯一无解的情况是,当 $x = 0$ 时,无法构造出任何进位,输出 $-1$。
实现上,只需要输出 $k$ 个 $9$ 和 $x$ 长度减去 $1$ 个 $0$ 即可。
```cpp
for (int i = 1; i <= k; ++i) printf("9");
for (int i = 1; i < x.length(); ++i) printf("0");
printf("\n");
```
因为是多组数据,请一定记得在每组数据最后输出换行。
## 视频题解
**完整代码请在视频题解中查看**。
