[语言月赛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"); ``` 因为是多组数据,请一定记得在每组数据最后输出换行。 ## 视频题解 **完整代码请在视频题解中查看**。 ![](bilibili:BV1jo4y1L7fz?page=7)