P10985 [蓝桥杯 2023 国 Python A] 整数变换 题解
P10985 [蓝桥杯 2023 国 Python A] 整数变换 题解
本题是 Python 题
思路分析
显然的,这道题目只考察选手对 Python 的运用,我们可以顺理成章的写出下面的代码。
s = input()
# 输入 s,此时的 s 是字符串
answer = 0
# 初始化答案变量
while s != '0':
answer += 1
# 更新答案
remove = 0
# 统计每一位的和
for x in s:
# 枚举每一个字符
remove += int(x)
# 更新每一位的和(必须用 int 将字符串类型转为数字类型)
s = str(int(s) - remove)
# 更新字符串,使用 str 将数字类型转为字符串类型
print(answer)
# 输出答案
(你知道为什么这个代码不在代码实现板块中吗?)
得益于 Python 的巨大常数,同时根据常识,字符串运算的常数是数字的数倍,这段代码 TLE 了……
而 PyPy3 对整数的运算有过优化(好像是不超过存储范围就先用类似于 C++ 的 long long 存,放不下了再用高精度,具体忘了),所以我们可以将其全程更改为使用整数计算即可通过。
代码实现
代码细节针对语言语法薄弱的同学已经写在了注释里。
s = int(input())
# 输入 s,并把 s 从字符串转为数字
answer = 0
# 初始化答案变量
while s != 0:
answer += 1
# 更新答案
remove = 0
# 统计每一位的和
n = s
# 使用 int 将 s 转为数字类型
while n != 0:
# 枚举 n 的每一位
remove += n % 10
# 更新和
n //= 10
# 重点:Python 中的除法符号 / 是浮点数(小数)的除法,整除符号是 //
s -= remove
# 将原数减去每一位的和
print(answer)
# 输出答案